php, выделять ключевые слова для поиска без разрыва тегов привязки - PullRequest
2 голосов
/ 10 февраля 2011

Я уже выполнил поиск в Google и Stackoverflow, но не смог найти какое-либо решение, которое мне подходит.

Это то, что я имею до сих пор:

$string = preg_replace('/'.$keyword.'/i', 
'<span class="highlight">$0</span>', $string);

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

Пример:

$keyword = 's';

Выход:

Я сделал s поиск на Google и S tackoverflow , но я не смог найти s Рацион, который работает с для меня.

Буду признателен, если кто-нибудь найдет решение для этого без использования PHP Simple HTML DOM Parser .

Ответы [ 2 ]

2 голосов
/ 11 февраля 2011

Это должно работать в большинстве ситуаций:

$string = preg_replace('/(?![^<>]*>)'.preg_quote($keyword,"/").'/i', 
'<span class="highlight">$0</span>', $string);
1 голос
/ 10 февраля 2011

Мне кажется, вам нужно использовать синтаксический анализатор DOM, поскольку вы хотите иметь дело только с «текстом» в вашей строке, а не со всей строкой. Таким образом, вам нужен способ определить, что такое «текст» и что такое атрибуты HTML.

Есть лотов примеров того, почему регулярное выражение не работает при попытке анализа HTML.

...