2013-02-27 5 views
0

я хочу выделить целые как выражения и отдельные словаHighlight поиска - целые выражения и отдельные слова

$text ="text text aaa bbb ccc text aaa text xxaaayy text bbb ccc text bbb cccxxx text"; 
$words = array('aaa bbb ccc','aaa bbb','bbb ccc','aaa','bbb','ccc'); 
foreach ($words as $k=>$v){ 
    $text = preg_replace('/(\w*?'.$v.'\w*)/i', '[b]$1[/b]', $text); 
} 

этот код возврата:

текст текст [b] [b] ааа [/ b] [b] bbb [/ b] [b] ccc [/ b] [/ b] текст [b] aaa [/ b] текст [b] xxaaayy [/ b] текст [b] [b] bbb [/ b] [б] ссс [/ b] [/ b] текст [b] [b] ГЭБ [/ b] [b] cccxxx [/ b] [/ b] текст

как получить этот результат:

текст [b] aaa bbb ccc [/ b] текст [b] aaa [/ b] текст [b] xxaaayy [/ b] текст [b] bbb ccc [/ b] текст [b] bbb cccxxx [/b] текст

Как изменить preg_replace?

+0

Вы, вероятно, необходимо использовать утверждения '(<' и сделать поиск регулярных выражений для всех групп слов сразу '?! aaa | bbb | aaa bbb', а не в цикле – mario

ответ

1

Там вы идете:

<?php 

$text ="text text aaa bbb ccc text aaa text xxaaayy text bbb ccc text bbb cccxxx text"; 
$words = array('aaa bbb ccc','aaa bbb','bbb ccc','aaa','bbb','ccc'); 
$text = preg_replace('/('.implode("|",$words).')/i', '[b]$1[/b]', $text); 
echo $text; 

?> 

ОБНОВЛЕНО Версия:

<?php 

$text ="text text aaa bbb ccc text aaa text xxaaayy text bbb ccc text bbb cccxxx text"; 
$words = array('aaa bbb ccc','aaa bbb','bbb ccc','aaa','bbb','ccc'); 
$text = preg_replace('/(\w*('.implode("|",$words).')\w*)/i', '[b]$1[/b]', $text); 
echo $text; 

?> 
+0

У меня есть одна небольшая проблема с этим, он не работает со специальными символами, например, вот так ... текст aaaóa текст .... preg_replace return: ... текст [b] aaa [/ b] - текст .... Как его изменить, файл находится в utf-8, данные из mysql в utf-8 тоже – user2117559

+0

@ user2117559 мой ответ является правильным для вашего вопроса, вы должны принять ответ, вы также можете заменить \ w на \ p {L}, чтобы соответствовать utf-8 символов. – Shehabix

+0

Конечно! Спасибо! – user2117559

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