正则表达式:匹配不包含的单词

时间:2015-10-15 22:54:09

标签: regex

我有以下几个字:

EFI Internal Shell
EFI Hard Drive
EFI Drive

我想匹配包含EFI但不包含Drive的单词。所以只有顶级单词(EFI内壳)才能匹配。

如何在正则表达式中完成?

我仔细观察了,没有一个答案能让我走上正轨。

例如:Regular expression that doesn't contain certain string表示使用^((?!my string).)*$didn't work。甚至匹配任何不包含Drive的字符串。

任何提示?

1 个答案:

答案 0 :(得分:6)

您的^((?!Drive).)*$根本无效,因为您针对多线输入进行了测试。您应该使用/m修饰符来查看what the regex matches。它只匹配不包含Drive的行,但淬火贪婪令牌不会检查字符串中是否有EFI

使用类似

的内容
^(?!.*Drive).*EFI.*$

请参阅regex demo

下面,

  • ^ - 匹配字符串
  • 的开头
  • (?!.*Drive) - 确保字符串
  • 中没有“云端硬盘”
  • .*EFI.* - 匹配其中包含EFI的字符串,直至...
  • $ - 字符串的结尾。

如果您的字符串包含换行符,请使用/s dotall修饰符或将.替换为[\s\S]。如果您打算匹配/检查整个单词,请在\b周围添加^(?!.*\bDrive\b).*\bEFI\b.*$