gpt4 book ai didi

php - 正则表达式忽略 HTML 标签中已有的 URL

转载 作者:可可西里 更新时间:2023-10-31 23:33:42 27 4
gpt4 key购买 nike

我的正则表达式有点问题

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

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

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

效果很好,但是如果 URL 在 [img][/img] block 中,上面的模式也会选择它并产生如下结果:

//[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 答案的第二条评论。

最佳答案

试试这个

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

查看here on Regexr

为了让它更通用,你可以简化你的lookbehind,只检查“=”

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

参见 it on Regexr

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

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

关于php - 正则表达式忽略 HTML 标签中已有的 URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9567836/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com