来自searchstring的Highlite单词

时间:2010-03-08 11:25:29

标签: php regex replace

我为一个客户端写了一个小的搜索脚本,它的工作和文字得到了高度重视,但是......

想象一下这种情况:

搜索字词:test

找到结果:Hello this <a href="/news/this-is-a-test">is a test</a>

在这个例子中,href部分和<a>标签之间的'test'都被高举,打破了链接。

我怎么能阻止这个?

编辑:

所以这就是我需要的:一个正则表达式替换函数替换所有匹配的搜索字符串,除了位于href属性中的那些

2 个答案:

答案 0 :(得分:1)

您无法使用正则表达式解析XML。 :(如果你想要一个仍然适用于许多情况的脏正则表达式解决方案,你可以试试这个正则表达式。

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

首先,您要查找标签右括号,而不是确保其间没有打开其他标签。

理想情况下,您希望解析HTML并仅替换它的文本部分。

答案 1 :(得分:0)

知道了!

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

print($altered_body);