【问题标题】:Find URLs in HTML-Sourcecode which are not yet tagged. Ignore tagged URLs在 HTML 源代码中查找尚未标记的 URL。忽略标记的 URL
【发布时间】:2013-10-23 20:17:47
【问题描述】:

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

My RegEx on Debuggex

【问题讨论】:

  • 结束 &lt;/a&gt; 标记有一个正斜杠。不是反斜杠。不要忘记可以有空格。
  • 我不明白你的情况。为什么"http://www.test.de" 没有命中而URL&lt;span&gt; 中却命中了?

标签: html regex tags grep pcre


【解决方案1】:

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

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

附言

如果我有类似的目标 - 我想要以下结构来 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

如果您的目标与我刚刚描述的相符 - 则完全移除后视,并将相应的前瞻替换为:

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

这基本上意味着URL后面不会跟任何类似于“”或“>”(标签的右括号)的东西

【讨论】:

  • 我们的目标一致!非常感谢!
猜你喜欢
  • 1970-01-01
  • 2012-03-22
  • 2016-07-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-02
  • 2021-11-21
相关资源
最近更新 更多