在HTML-Sourcecode中查找尚未标记的URL。忽略已标记的网址

时间:2013-10-15 21:12:52

标签: html regex tags grep pcre

我想在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

My RegEx on Debuggex

1 个答案:

答案 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;” (标签的结束括号)