4

我的正则表达式有点问题

我为我的网站制作了一个自定义 BBcode,但我也希望解析 URL。

我正在使用 preg_replace,这是用于识别 URL 的模式:

/([\w]+:\/\/[\w-?&;#~=\.\/\@]+[\w\/])/is

效果很好,但是如果 URL 在 [img][/img] 块内,上述模式也会将其拾取并产生如下结果:

//[img]http://url.com/toimg.jeg[/img] will produce this result:
<img src="<a href="http://url.com/toimg.jeg" target="_blank">/>
//When it should produce:
<img src="http://url.com/toimg.jeg"/>

我尝试使用这个:

/([^"][\w]+:\/\/[\w-?&;#~=\.\/\@]+[\w\/][^"])/is

没有运气。

任何帮助将不胜感激。

编辑: 有关解决方案,请参阅关于 stema 答案的第二条评论。

4

1 回答 1

3

试试这个

(?<!href=")(\b[\w]+:\/\/[\w-?&;#~=\.\/\@]+[\w\/])

在 Regexr 上查看

为了使其更通用,您可以简化后向检查以仅检查“=”

(?<!=")(\b[\w]+:\/\/[\w-?&;#~=\.\/\@]+[\w\/])

在 Regexr 上查看

(?<!href=")是一个否定的lookbehind断言,它确保你的模式之前没有“href=”。

\b是一个单词边界,它将链接的开头锚定到从非单词到单词字符的变化。没有这个,lookbehind 将毫无用处,它会从“ttp://...”开始匹配。

于 2012-03-05T14:03:00.447 回答