首页 > 解决方案 > 如果在特定内容中则跳过匹配

问题描述

我需要匹配文本中的给定单词,除非在特定句子中找到。

到目前为止,我创建了以下正则表达式:

(?!^)\G(?:['"][a-z0-9:\/._-]+example.com[a-z0-9:\/._-]+['"])(*SKIP)(*FAIL)|((?:\b|[_])elementor)(?:\b|[_])

因此,如果在“ http://example.com/content/elementor ”中找到了 elementor 这个词,则这不应该匹配。

这是一个正则表达式测试器https://regex101.com/r/NMOvfx/1/

标签: phpregex

解决方案


您可以使用

'~https?://[^\s'"]*(*SKIP)(*FAIL)|(?<![^\W_])(elementor)(?![^\W_])~'

查看正则表达式演示

细节

  • https?://-https://http://
  • [^\s'"]*- 0 个或多个除空格以外的字符,'"
  • (*SKIP)(*FAIL)- 丢弃当前匹配并从失败的匹配端搜索下一个匹配
  • |- 或者
  • (?<![^\W_])- 前面没有单词或_字符的位置
  • (elementor)- 第一组:单词elementor
  • (?![^\W_])- 后面没有单词或_字符的位置。

推荐阅读