php,突出搜索关键字而不破坏锚标签

时间:2011-02-10 11:08:03

标签: php regex preg-replace simple-html-dom

我已经在Google和Stackoverflow上进行了搜索,但我找不到任何适用于我的解决方案。

这是我到目前为止所做的:

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

哪个工作正常,除非字符串包含锚标记。但我仍然希望能够突出显示锚标记之外和之内的关键字。

示例:

$keyword = 's';

输出:

我alrady在GoogleStackoverflow上做了 s earch,但我找不到任何 s 解决方案对我来说

如果有人能够找到解决方案而不必使用 PHP Simple HTML DOM Parser ,我将不胜感激。

2 个答案:

答案 0 :(得分:2)

这应该适用于大多数情况:

$string = preg_replace('/(?![^<>]*>)'.preg_quote($keyword,"/").'/i', 
'<span class="highlight">$0</span>', $string);

答案 1 :(得分:1)

在我看来,您需要使用DOM解析器,因为您只想处理字符串中的“text”,而不是整个字符串。因此,您需要一种方法来确定什么是“文本”以及什么是HTML属性。

有很多很多的示例,说明为什么正则表达式无法用于解析HTML。