我想在HTML源代码中找到网址。 但只有没有围绕它们的标签的URL。 我想出了这个:
(?<!")((http(s)?://|http(s)?://www\.|(?<!/)www\.)([\w\._\-/&%]+))(?!</a>)
它可以很好地避免作为链接一部分的URL,但也可以找到带标记的URL ... 我想通过测试“没有关闭a-tag”我可以避免标记的URL ... 错误在哪里
<a href="https://foo.com">https://www.foo.com</a> <- should not hit
<span class="bar>www.test.de</span> <-HIT
"http://www.test.de" <- HIT
<a href="http://test.de">http://www.foo.com/_manno/Propello&%_-/ramblay</a> should not HIT
<span>http://www.test.de/alala </span> <-HIT
答案 0 :(得分:1)
要使您的示例正常工作 - 只需将前瞻(在您的正则表达式末尾)替换为:
(?![^<]*<\/a>)
<强> P.S。强>
如果我有类似的目标 - 我想要对HIT进行以下构造:
<span class="bar>"http://www.my.test"</span> <- I'd want this to HIT ;)
"http://www.test.de" <- I'd want this to HIT too (while not inside a tag)
<a href="http://www.test.de" option="2"> <- should NOT hit
如果您的目标与我刚才描述的相符,那么请完全删除lookbehind并用以下内容替换相应的前瞻:
(?![^<>]*(>|<\/a>))
这基本上意味着网址后面不会出现类似“&lt; / a&gt;”的内容或“&gt;” (标签的结束括号)