【问题标题】:Find a word not contained in a tag查找标签中未包含的单词
【发布时间】:2015-09-05 17:45:45
【问题描述】:

我正在尝试制作一个匹配“a”标签中不包含的单词的正则表达式,我必须用链接替换一些术语,而不会破坏已经存在的链接。 例如,搜索术语“stackoverflow”,这应该匹配

stackoverflow is magic

但这两个都不应该:

Jump to <a href="stackoverflow.com">stackoverflow</a>

我该怎么做?即使我使用 HTML 解析器,我仍然面临如何将 preg_replace 应用于“a”标签中不包含的术语的问题。

我发现这个正则表达式听起来不错:

(?![^<]*a>)stackoverflow

但不幸的是,这在 PHP 中不起作用。 非常感谢您的帮助

【问题讨论】:

标签: php regex


【解决方案1】:

Your regex fails 如果行中有a&gt;


使用(*SKIP)(*F)动词|匹配word跳过链接like this

/<a[\s>][\s\S]*?\/a>(*SKIP)(*F)|stackoverflow/i

\s 匹配空格,[\s\S] 匹配任何字符。

【讨论】:

  • [\s\S]*? 是一个只在 Javascript 中需要的技巧,对于 PHP,使用 .*?s(又名 singleline)修饰符。
  • 非常感谢,就像一个魅力。我不知道 SKIP 技巧(我们每天都在学习正则表达式!)
  • 如果该词不包含在 标签中,是否有办法在同一个表达式中进行检查,?我也有 img 标签,当我有例如 时会出现相同的 pb
猜你喜欢
  • 1970-01-01
  • 2022-07-23
  • 1970-01-01
  • 2020-12-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多