2015-10-15 158 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.*$