我有以下几个字:
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的字符串。
任何提示?
答案 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.*$
。