正则表达式排除一些单词但匹配一个

时间:2018-11-09 16:16:50

标签: regex regex-negation regex-lookarounds

是否可以编写与“ findme”匹配但在行中包含“ black”或“ red”或“ yellow”字样时不匹配的正则表达式?

Possible regex: (?!black|red|yellow)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)

2 个答案:

答案 0 :(得分:1)

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

^(?!.*(?:black|red|yellow)).*(findme)

演示:https://regexr.com/42r4q


详细信息:

  • ^-匹配字符串的开头
  • (?!)-前瞻否定
  • .*-匹配任意字符(换行符除外)0次以上
  • (?:)-非捕获组
  • black|red|yellow-匹配“黑色”,“红色”或“黄色”
  • findme-匹配'findme'字符串

标志:

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

答案 1 :(得分:0)

针对不需要的字词,使用否定的前瞻性锚定以开始:

^(?i)(?!.*(black|red|yellow)).*findme

请参见live demo通过所有测试。

(?i)的意思是“忽略大小写”
(?!...)是对未来的否定(断言而不会消耗未找到表达式)