2015-10-15 164 views
3

我有以下文字匹配的字:正则表达式:不包含

EFI Internal Shell 
EFI Hard Drive 
EFI Drive 

我想匹配包含EFI,但不包含驱动器的话。所以只有最上面的字(EFI Internal Shell)应该匹配。

这怎么能在正则表达式中完成?

我翻遍了SO,没有一个答案能让我走上正轨。

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

任何提示?

回答

4

您的^((?!Drive).)*$完全不起作用,因为您是针对多行输入进行测试的。您应该使用/m修饰符来查看what the regex matches。它只是匹配不包含Drive的行,但脾气暴躁的令牌不检查EFI是否在字符串内。

使用类似

^(?!.*Drive).*EFI.*$ 

regex demo

这里,

  • ^ - 比赛开始串
  • (?!.*Drive)的 - 确保没有 “驱动器” 的字符串
  • .*EFI.* - 匹配一个字符串与EFI在它最多到...
  • $ - 字符串的结尾。

如果你的字符串中有换行符,要么使用/s DOTALL修改或替换[\s\S].。如果你打算匹配/检查整个单词加上\b围绕单词:^(?!.*\bDrive\b).*\bEFI\b.*$