Я пытаюсь выделить результаты поиска, но хочу включить окружающий текст, который ограничен тегами.
Так что, если $ term является "крутым", preg_replace должно закончиться с:
<div><span style="background: #f00">My hair cut so cool!</span></div>
К сожалению, мое регулярное выражение, кажется, не захватывает окружающий текст, только $ term. Окружающие теги могут быть любыми допустимыми тегами.
0:
1: $term = 'cool';
2: ob_start();
3:
10: foreach($items as $item) {
11: // echoing results here
12: echo '<div>' . $item->text . '</div>';
13: }
30: $content = ob_get_contents();
31: ob_clean() ;
32:
33: $pattern = "/(?<!<[^>])($term)/i";
34: $replace = "<span style=\"background: #f00\">$1</span>";
35: echo preg_replace($pattern, $replace, $content);
36:
РЕДАКТИРОВАТЬ: цикл foreach является одним из многих и находится в отдельном классе. Из-за этого я не могу сделать замену в самом цикле. Также представляется более эффективным обрабатывать окончательный вывод вместо каждого цикла данных.