2013-11-25 2 views
0

У меня возникла проблема с поиском слов в строке и преобразованием их в ссылки. Как сделать поиск, который рассматривает слова, содержащие «-» как целое слово, а не как 2 слова, разделенные «-»?PHP preg_replace: совпадающие слова, содержащие тире

Вот пример, если я ищу слово «исчерпывающий», моя функция поиска также будет соответствовать части слова «неисчерпывающий», хотя я не хочу, чтобы это слово соответствовало.

$string = "Bla bla bla non-exhaustive blabla bla exhaustive"; 
$words = array('exhaustive','non-exhaustive'); 
foreach ($words as $word) { 
    $string = preg_replace('/\b'.$word.'\b/i', '<a href=#>'.$word.'</a>',$string); 
} 

echo $string; 

Результат:

Бла бла бла не- исчерпывающими блабла бла исчерпывающими

Большое спасибо за вашу помощь!

+2

Вы можете явно предотвратить дефис: ' '/ \ Ь [^ \ -] '. $ word.' \ b/i'' –

ответ

1
$string = preg_replace('/\b[^\-]' . preg_quote($word) . '\b/i', '<a href=#>' . $word . '</a>',$string); 

Если делать трюк :)

* редактировать, Алекс сделал бить меня только 2 секунды: р

+0

Использовать ['preg_quote'] (http://www.php.net/preg_quote) в' $ word', и я поддержу вас. :) – h2ooooooo

+0

Спасибо, что отлично работает! – ZaDav

+0

@ h2ooooooo спасибо за подсказку! –

Смежные вопросы