如果没有正确的话,正则表达式匹配

时间:2012-03-05 14:49:39

标签: php regex

我有一个匹配网址的正则表达式并将它们转换为HTML链接。 如果网址已经是链接的一部分,我不想匹配,例如:

http://stackoverflow.com/questions/ask

应该匹配,但是:

<a href="http://stackoverflow.com/questions/ask">Stackoverflow</a>

不匹配

如何创建正则表达式来执行此操作?

4 个答案:

答案 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