我有以下正则表达式,它将所有纯文本超链接替换为实际的锚标记。
$acturl = '~(?:(https?)://([^\s<]+)|(www\.[^\s<]+?\.[^\s<]+))(?<![\.,:])~i';
$content = preg_replace($acturl, '<a href="$0">$0</a>', $content);
但是,此代码的问题在于它也将 img 标签转换为锚点。
例如,<img src="https://link.com">
将成为<img src="<a href='https://link.com'>https://link.com</a>">
。
有没有办法让这个正则表达式忽略图像并且只对纯文本 URL 进行操作?
您可以在正则表达式的开头添加负面回顾:
(?<!src=["'])
如果前面有字符src="
或,这将阻止 URL 匹配src='
。
请注意,如果您使用解析器(例如DOMDocument
),您可以通过仅替换文本节点中的链接来避免此问题。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句