1

我想在 HTML 源代码中查找 URL。但只有周围没有标签的 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

我在 Debuggex 上的正则表达式

4

1 回答 1

1

为了使您的示例工作 - 只需将前瞻(在您的正则表达式末尾)替换为:

(?![^<]*<\/a>)

附言

如果我有类似的目标 - 我想要以下结构来命中:

<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

如果您的目标与我刚刚描述的相匹配 - 然后完全删除后向并将相应的前瞻替换为:

(?![^<>]*(>|<\/a>))

这基本上意味着 URL 后面不会跟任何类似于 "</a>" 或 ">" 的内​​容(标签的右括号)

于 2013-10-15T23:41:20.383 回答