Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Тексты > Подсветка результатов поиска


Автор: CTAPbIuMABP 6.6.2006, 18:16
я хочу написать подсветку результатов поиска но проблема в том что если парсить всю страницу регуляркой типа 

Код

preg_replace("#слово1|слово2|слово3#i", "<font color=#cc0000>\\0</font>", $text);


то она будет подсвечивать и html теги, а это не хорошо потому что портится страница...

нашел такое решение

Код

eregi_replace("#>([^<]*)(слово1|слово2|слово3)#", ">\\1<font color=#cc0000>\\2</font>", $text);


но оно почемуто подсвечивает только последние вхождение в строку 

помогите плз! 

Автор: Kagor 6.6.2006, 19:35
Модератор: перемещено из Новости IT\Новости из мира PHP. 

Автор: Wolf1994 11.6.2006, 13:44
Не совсем регулярка, но работает достаточно быстро:

Код

//строчка для временной замены
$stupid="gtrujk";

//"спасаем" все тэги
preg_match_all ("/<.*>/Usi", $body, $out2);

//подменяем их заменителем
$body=preg_replace ('/<.*>/Usi', $stupid, $body);

//подсвечиваем результаты поиска
$body=str_ireplace ($seekres, '<span class="seekres">'.$seekres.'</span>', $body);

//"пробегаемся" по подменённым тэгам и восстанавливаем их
$heck=0;
for ($i=0; $i<count ($out2 [0]); $i++)
{
 $heck=strpos ($body, $stupid, $heck);
 $body=substr ($body, 0, $heck).$out2 [0] [$i].substr ($body, $heck+strlen ($stupid));
}


Этот же скорипт можно использовать для "сложных" обработок отдельных фрагментов текста - вытащить эти фрагменты, пропустить через любое количество обработчиков, и "загнать" обратно - на свои места. 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)