2010-03-08 132 views
0

的HIGHlite话,我写了一个小的搜索脚本客户端,它的工作原理和文字得到白标明的,但是......从搜索字符串

想象一下这样的情况:

搜索词:test

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

在此示例中,href部分中的'test'和<a>标签之间的标记都被高亮显示,从而打破了链接。

我该如何防止这种情况?

编辑:

所以这正是我需要的:一个正则表达式替换功能,替换所有匹配的搜索字符串除非是位于href属性

+0

安置自己的搜索和替换代码。 – codaddict 2010-03-08 11:30:36

回答

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); 
1

你不能用正则表达式解析XML里面的人。 :(如果你想有一个肮脏的正则表达式的解决方案,仍然工作在很多情况下,你可以尝试这个表达式。

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

首先,你找一个标签结束花比你确保没有其他标签之间打开了。

最好要解析HTML和替换它只是文本的部分。

+0

确实是这样,我需要解析HTML并仅替换文本部分。 > [^ <] *?(测试)是最好的解决方案吗? – Bundy 2010-03-08 12:28:07