Regex 正则表达式排除某些单词,但与其中一个匹配

Regex 正则表达式排除某些单词,但与其中一个匹配,regex,regex-negation,regex-lookarounds,Regex,Regex Negation,Regex Lookarounds,是否可以编写一个与“findme”匹配的正则表达式,但如果该行包含“黑色”、“红色”或“黄色”单词,则该正则表达式不匹配 排除词:黄色、黑色、红色 测试线: findme (OK) xyz (NOT!) XYZfindmeXYZ (OK) somethingelseFINDMEsome_thingelse (OK) BLACK_ findme (NOT !) BLACK findme (NOT !) XyBlacK findme xy

是否可以编写一个与“findme”匹配的正则表达式,但如果该行包含“黑色”、“红色”或“黄色”单词,则该正则表达式不匹配

排除词:黄色、黑色、红色

测试线:

findme     (OK)
xyz        (NOT!)
XYZfindmeXYZ     (OK)
somethingelseFINDMEsome_thingelse     (OK)
BLACK_ findme       (NOT !)
BLACK findme       (NOT !)
XyBlacK findme xyz_xy       (NOT !)
xy findme RED           (NOT !)
yellow__ findme _xy        (NOT !)
_xy_ findme _something    (OK)

您可以使用以下正则表达式:

^(?。*(?:黑色|红色|黄色)).*(findme)

演示:


详细信息:

  • ^
    -匹配字符串的开头
  • (?!)
    -消极前瞻
  • *
    -匹配任何字符(除换行符外)0+次
  • (?:)
    -非捕获组
  • 黑色|红色|黄色
    -匹配“黑色”、“红色”或“黄色”
  • findme
    -匹配“findme”字符串
标志:

  • g
    -全球
  • i
    -不区分大小写
  • m
    -多行

对于不需要的术语,使用一个锚定到开始的负面展望:

^(?i)(?!.*(black|red|yellow)).*findme
看看你是否通过了所有的考试

(?i)
表示“忽略案例”

(?!…)
是一种消极的前瞻(在不使用表达式的情况下断言未找到表达式)

您不需要后面的前瞻。第一个前瞻涵盖了整个输入。在什么上下文中?您使用什么语言?您试图实现什么?
^(?i)(?!.*(black|red|yellow)).*findme