Чей то не нашел более менее правильного решения, и так же натолкнувший на подобный вопрос в другом форуме накропал свой. Требовалось "подсветить" найденые слова в HTML. Код (Text): $text="text text1 text3 text <b>text</b> text3 <span> text <a href='text'>text</a> text</span> text4 <a href='text' > text </a>"; $find_text="text"; $find_text_rep_open="[megateg]"; $find_text_rep_close="[/megateg]"; $find_text=preg_quote($find_text); $text2=preg_replace( "#(\<([/]*)(.+?)[^>]*\>)([ ]*)(".$find_text.")([ ]*)(\<([/]*)(.+?)[^>]*\>)#is","\\1\\4".$find_text_rep_open."\\5".$find_text_rep_close."\\6\\7",$text ); $text2=preg_replace( "#(?!".preg_quote($find_text_rep_open).")(^|[ ])(".$find_text.")($|[ ])(?!".preg_quote($find_text_rep_close).")#is","\\1".$find_text_rep_open."\\2".$find_text_rep_close."\\3",$text2 ); $text2=str_replace($find_text_rep_open, '<font style="background:yellow">', $text2); $text2=str_replace($find_text_rep_close, '</font>', $text2); echo "<br><br><br>".$text."<br>\n".$text2; $text=str_replace('<', '& lt;', $text); $text2=str_replace('<', '& lt;', $text2); echo "<br><br><pre>".$text."<br>\n".$text2."</pre>"; Вроде бы работает регулярка, подствечивает слова вне тегов (т.е. ссылки не убъет ) Поповоду ее правильности жду комментов. По поводу оптимизированности кода - сам знаю %)) ЗЫ юбилейный, 11 битовый топик %))
Как насчёт резать все теги(выделять текст из кода) перед анализом? Выводить текст с форматированием, отличным от выделения найденых слов - вводить в заблуждение юзера, имхо.
регулярку не читал ибо напомнила недавний пост про e-mail, где регуляка была со страницу, ибо уверен на 98,76% что тут нужна логика, аля автомат, одними регуляками не обойтись.
Clone а если нужно страницу показать юзеру? а найденые слова специально выделить и раскрасить в красный шрифт на желтом фоне. Яндексы этим не брузгуют, и правильно делают. Причем, если уж ввозить юзера в заблюждение, так это удалив все теги, всякие таблицы будут смотреться просто замечательно)))