我目前在循环中有以下代码:
$message = preg_replace("/({$data[0]})/i","<a href=\"{$data[1]}\" class=\"postlink\">$1</a>",$message,1);
这个循环的目的是寻找特定的关键字($ data [0])并将它们转换为$ data [1]中URL的链接。我也使用限制为1。
这在某种程度上可行。但是,我正在尝试改进此正则表达式以防止出现以下问题:
<a href="blabla">this is a test</a>
之类的内容,我不希望替换关键字“test”,因为它已经是链接的一部分。这是我到目前为止所遇到的主要问题,可能还有更多。我正在寻找帮助,写一个更好的正则表达式来避免这些问题。
由于
答案 0 :(得分:0)
这些很有趣。要使用,只需将“test”替换为下面模式中的数据。
/test(?![^><]*?(?:>|<\/a))/
编辑:更新了模式。
在回复您的评论时,请使用以下内容:
$message = preg_replace("/({$data[0]}(?![^><]*?(?:>|<\/a)))/i","<a href=\"{$data[1]}\" class=\"postlink\">$1</a>",$message,1);
答案 1 :(得分:0)
这只是检查行的开头,或关键字前的空格,字符串的结尾,或单词后面的空格:
$message = preg_replace("/(^|\s)({$data[0]})($|\s)/mi","$1<a href=\"{$data[1]}\" class=\"postlink\">$2</a>$3",$message,1);
这应解决你的问题。