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

标签 php html regex preg-replace url-parsing

我的正则表达式有点问题

我为我的网站制作了自定义 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/

相关文章:

jquery - 如何在新的 Electron 窗口上使用CSS?

html - 如何以编程方式在 JQM 中创建 ListView

java - 需要帮助在 Java 中查找正则表达式来捕获字符串中所有格式的日期

regex - gawk 匹配函数参数作为正则表达式

regex - 通过扩展现有正则表达式在匹配项内进行匹配

php - 在二维数组中搜索... php

php - 为什么我修改 php.ini 文件以启用 extension=php_pdo.dll、extension=php_pdo_mysql.dll 后会回显 "pdo support is NOT loaded"?

php - sql SELECT 语句中的多个运算符

html - 原始音频数据流式传输期间网络音频播放出现裂纹

PHP 仍然不允许上传大于 2 MB 的文件