我为一个客户端写了一个小的搜索脚本,它的工作和文字得到了高度重视,但是......
想象一下这种情况:
搜索字词:test
找到结果:Hello this <a href="/news/this-is-a-test">is a test</a>
在这个例子中,href部分和<a>
标签之间的'test'都被高举,打破了链接。
我怎么能阻止这个?
编辑:
所以这就是我需要的:一个正则表达式替换函数替换所有匹配的搜索字符串,除了位于href属性中的那些
答案 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);