Regex 如何跳过已在锚标记中的域?

Regex 如何跳过已在锚标记中的域?,regex,html-parsing,Regex,Html Parsing,下面的正则表达式很好地匹配了下面的域,但我不希望它匹配已经在锚标记中的域(最后一个示例)。请注意,这种匹配将在文本语句中检测这些情况 ((?: http| https)://)?[.0-9a-z-]+\.[a-z]{2,6}(?::[0-9]{1,5}+)?(?:/[!$'()*+,._a-z-]++){0,9}(?:/[!$'()*+,._a-z-]*)?(?:\?[!$&'()*+,.=_a-z-]*)? 在句子或段落中与此匹配: www.domain.com domain.com

下面的正则表达式很好地匹配了下面的域,但我不希望它匹配已经在锚标记中的域(最后一个示例)。请注意,这种匹配将在文本语句中检测这些情况

((?: http| https)://)?[.0-9a-z-]+\.[a-z]{2,6}(?::[0-9]{1,5}+)?(?:/[!$'()*+,._a-z-]++){0,9}(?:/[!$'()*+,._a-z-]*)?(?:\?[!$&'()*+,.=_a-z-]*)?
在句子或段落中与此匹配:

www.domain.com
domain.com
this.is.a.special.url.domain.com/hello 
http://domain.com
http://www.domain.com
http://www.domain.com/
http://www.domain.com/index.html
http://www.domain.com/index.html?source=library
但是,如何将正则表达式更改为不匹配已在锚标记中的域

<a href="http://www.usertesting.com">hello</a>

您只需添加负查找即可排除以下匹配项:
href=“
href=”

(?<!href=["'])((?: http| https)://)?[.0-9a-z-]+\.[a-z]{2,6}(?::[0-9]{1,5}+)?(?:/[!$'()*+,._a-z-]++){0,9}(?:/[!$'()*+,._a-z-]*)?(?:\?[!$&'()*+,.=_a-z-]*)?

(?不要使用正则表达式来解析HTML。请使用适当的HTML解析模块。您无法使用正则表达式可靠地解析HTML,您将面临悲伤和挫折。一旦HTML与您的期望发生变化,您的代码将被破坏。有关如何使用PHP模块正确解析HTML的示例,请参阅或“我已经编写、测试和调试过了。@AndyLester,谢谢,但我不是在分析html,我跳过了html,只查找非html URL。我理解这一点,并且识别文件的哪一部分是标记,哪一部分是文本确实是在分析html。”。