关于php:如何使自动超链接正则表达式忽略带有src的img标签?

How to make auto hyperlink regex ignore img tags with src?

本问题已经有最佳答案,请猛点这里访问。

我有以下正则表达式,它将所有纯文本超链接替换为实际的锚标记。

1
2
3
$acturl = '~(?:(https?)://([^\\s<]+)|(www\\.[^\\s<]+?\\.[^\\s<]+))(?<![\\.,:])~i';

$content = preg_replace($acturl, '$0', $content);

但是,这段代码的问题在于它也将 img 标签转换为锚点。

例如,
<img src="https://link.com"> 将变为 <img src="https://link.com">.

有没有办法让这个正则表达式忽略图像并且只对纯文本 URL 进行操作?


你可以在你的正则表达式的开头添加一个否定的look-behind:

1
(?<!src=["'])

如果 URL 前面有字符 src="src=',它将阻止 URL 匹配。

3v4l.org 上的演示

请注意,如果您使用解析器(例如 DOMDocument),您可以通过仅替换文本节点中的链接来避免此问题。