Выделите слова из строки поиска - PullRequest
0 голосов
/ 08 марта 2010

Я написал небольшой скрипт поиска для клиента, он работает и слова выделяются, НО ...

Представьте себе такую ​​ситуацию:

поисковый запрос: test

найден результат: Hello this <a href="/news/this-is-a-test">is a test</a>

В этом примере подсвечиваются как 'test' в части href, так и между тегами <a>, разрывая ссылку.

Как я мог предотвратить это?

Edit:

Вот что мне нужно: функция замены регулярных выражений, которая заменяет все совпадающие строки поиска, КРОМЕ тех, которые находятся внутри атрибута href

Ответы [ 2 ]

1 голос
/ 08 марта 2010

Нельзя анализировать XML с помощью регулярных выражений. :( Если вам нужно грязное решение для регулярных выражений, которое все еще работает во многих случаях, вы можете попробовать это регулярное выражение.

">[^<]*?(test)"

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

В идеале вы хотите разобрать HTML и заменить только его текстовые части.

0 голосов
/ 08 марта 2010

Понял!

$body = $row['body'];
$pattern = "/".$search_string."(?!([^<]+)?>)/i";
$replacement = "<strong class='highlite'>".$search_string."</strong>";
$altered_body = preg_replace($pattern, $replacement, $body);

print($altered_body);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...