PHP заменя ключови думи в низ с href връзка

Тази сутрин съм „напрегнат“, така че моля да ме извините за този прост въпрос – имам набор от ключови думи, напр. array('keyword1','keyword2'....) и аз имам низ от текст - (малко като съдържание на блог по дължина, т.е. не само няколко думи, но може да бъде 200-800 думи) кой е най-добрият начин да търсите в низа ключовите думи и да ги замените с href връзка . Така в текста „ключова дума 1“ (като обикновен текст) ще стане <a href='/bgapage'>keyword1</a> и така нататък.

Виж казах, че съм дебел тази сутрин.

Благодаря предварително.


person Russell Parrott    schedule 15.09.2011    source източник


Отговори (2)


Типичен preg_replace случай:

$text = "There is some text keyword1 and lorem ipsum keyword2.";
$keywords = array('keyword1', 'keyword2');

$regex = '/('.implode('|', $keywords).')/i';

// You might want to make the replacement string more dependent on the
// keyword matched, but you 'll have to tell us more about it
$output = preg_replace($regex, '<a href="/bgapage">\\1</a>', $text);

print_r($output);

Вижте го в действие.

Сега горното не прави много "интелигентна" замяна в смисъл, че href не е функция на съвпадащата ключова дума, докато на практика вероятно ще искате да направите това. Вижте preg_replace_callback за повече гъвкавост тук или редактирайте задайте въпрос и предоставете повече информация относно вашата цел.

person Jon    schedule 15.09.2011
comment
Идеално благодаря прави това, което искам, просто от интерес, има ли начин да съвпадне само при първото възникване на ключова дума? - person Russell Parrott; 15.09.2011
comment
@RussellParrott: Съвпадението само на първото копие на която и да е ключова дума е просто. Съпоставянето на първото копие на всяка ключова дума не е толкова лесно; трябва или да направите preg_replace за всяка една ключова дума с ограничение от 1 в цикъл или (за предпочитане) да използвате preg_replace_callback, да запомните кои ключови думи вече са съвпаднали поне веднъж и да върнете самата ключова дума като заместител на тези, които вече са били видяно. - person Jon; 15.09.2011

ЗАЩО бихте използвали regex вместо просто str_replace()!? Regex работи, но усложнява толкова невероятно прост въпрос.

person John    schedule 28.05.2012