我有一个匹配网址的正则表达式并将它们转换为HTML链接。 如果网址已经是链接的一部分,我不想匹配,例如:
http://stackoverflow.com/questions/ask
应该匹配,但是:
<a href="http://stackoverflow.com/questions/ask">Stackoverflow</a>
不匹配
如何创建正则表达式来执行此操作?
答案 0 :(得分:4)
如果您的匹配正则表达式的网址为$URL
,那么您可以使用以下模式
(?<!href[\"'])$URL
在PHP中你会写
preg_match("/(?<!href[\"'])$URL/", $text, $matches);
答案 1 :(得分:1)
你可以使用负面的lookbehind断言网址前面没有href="
(?<!href=")
(您的网址匹配模式应该在此之后立即进行。)
答案 2 :(得分:0)
此link提供了相关信息。接受的解决方案是这样的:
<a\s
(?:(?!href=|target=|>).)*
href="http://
(?:(?!target=|>).)*
通过删除对“target”的引用,这应该对你有用。
答案 3 :(得分:0)
试试这个
/(?:(([^">']+|^)https?\:\/\/[^\s]+))/m