【问题标题】:Regex to match <a> tags that do not contain specific URL query正则表达式匹配不包含特定 URL 查询的 <a> 标记
【发布时间】:2015-04-01 16:04:50
【问题描述】:

我需要一个正则表达式来选择所有不包含特定查询的&lt;a&gt; 标签。例如这里是一个标签列表:

<!-- valid -->
<a href="testsite.com">Test Content</a>
<a href="testsite.com?source=facebook">Test Content</a>
<a href="testsite.com?test=123">Test Content</a>
<a href="testsite.com/path/morepath">Test Content</a>

<!-- invalid (query string is test=abc) -->
<a href="testsite.com?test=abc">Test Content</a>

如何编写只选择没有查询字符串为test=abc 的链接的正则表达式。我在 Stack Overflow 上进行了全面搜索,虽然我了解负前瞻/后瞻的概念,但我似乎无法让它发挥作用。

我正在开发一个自定义 RSS 提要,用于在第三方网站上推广内容。我正在使用 WordPress 循环来提取内容,动态查找属于我们网站的链接并添加查询字符串。完成后,我需要找到所有没有查询字符串的链接,以便我可以根据第三方网站的要求剥离标签。我希望这能提供更多的洞察力。

【问题讨论】:

  • 嗨@Cory,在格式化代码时,请确保在段落和代码之间添加一些新行,以便正确格式化。 Corys 必须团结一致,所以这次我得到了你的支持 :)
  • 关于 Stack Overflow 的第一篇文章。我试着把它清理一下。如果我遗漏了什么,请告诉我。
  • 您能补充一下您使用的语言/技术吗?在我看来,正则表达式在这里可能不是正确的解决方案。另外,欢迎Stack Overflow!
  • 一般来说,正则表达式并不是解析 HTML 的好工具。请参阅htmlparsing.com/regexes 了解大多数正则表达式找不到的一些 HTML 代码示例。

标签: regex html-parsing query-string


【解决方案1】:

试试这个正则表达式:

<a href="(?![^>]*?test=abc">[^"]*?>)[^"]*">([^<]+)<\/a>

见demo。

【讨论】:

  • 这确实帮助我解决了这个问题。我会投票给你的答案,但它说我需要 15 的声誉才能这样做。
  • @CoryChambers:很高兴为您提供帮助。您可以接受答案(赞成票数正下方的勾号)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多