0

好的,这是我的问题:

我有一个链接,比如:http ://www.blablabla.com/watch?v=1lyu1KKwC74&feature=list_other&playnext=1&list=AL94UKMTqg-9CfMhPFKXPXcvJ_j65v7UuV

链接在两个标签之间,如下所示:

<br>http://www.blablabla.com/watch?v=1lyu1KKwC74&feature=list_other&playnext=1&list=AL94UKMTqg-9CfMhPFKXPXcvJ_j65v7UuV<br></p>

将此正则表达式与 preg_replace 一起使用:

'@(^|[^\/]|[^>])('.addcslashes($link,'.?+').')([^\w\/]|[^<]$)@i'

像这样:

preg_replace('@(^|[^\/]|[^>])('.addcslashes($link,'.?+').')([^\w\/]|[^<]$)@i', "***",$strText);

结果字符串是:

<br***p>

这是错的!

应该是

 <br>***<br></p>

我怎样才能得到想要的结果?我已经竭尽全力试图解决这个问题。

我想提一下,str_replace甚至替换另一个有效链接中的链接,所以这不是一个好方法,我需要两个边界之间的完全匹配,即使边界是文本或另一个 HTML 标记。

4

1 回答 1

1

假设您出于某种原因不想使用 DOM 解析器,我相信按照您的意图进行操作很简单,如下所示:

preg_replace('@(^|[^\/]|[^>])('.addcslashes($link,'.?+').')([^\w\/]|[^<]$)@i', "$1***$3",$strText);

这使用 $1 和 $3 放回您在正则表达式中匹配的定界文本。

正如其他人所指出的,使用 DOM 解析器更可靠。

这是做你想做的吗?

于 2012-11-01T18:45:36.773 回答