仅当字符串完全匹配时如何否定正则表达式

How to negate a regex only if the strings match exactly

在 post 回答这个问题之前,我已经浏览了 Regex Wiki 以及以下 SO 问题:

How To Negate Regex

RegEx to exclude a specific string constant

这是我的工作成果,部分是我想要的:

(?!INVALID).*$

http://refiddle.com/refiddles/577c888075622d5f3e125700

第一个 SO post 在编辑 posted 正则表达式后实际上稍微解决了我的问题

我工作的问题是当单词以 INVALID

开头时正则表达式失败

所以基本上 :

我希望正则表达式仅在字符串完全匹配时才匹配 "INVALID"

您需要在负面展望中包含 $

^(?!INVALID$).*
           ^----------added "$" here

这可以防止整个输入(不仅仅是前导输入)"ÌNVALID"

您可能想尝试 经过锻炼的贪婪令牌

^(?:(?!INVALID).)+$

这会使以下所有内容无效,但最后一个:

TestINVALID
TestINVALID123
INVALID
INVALIDTest
this one will be valid

参见 a demo on regex101.com 并注意 multiline 标志。


再次阅读您的问题后,它变得更加不清楚。您要匹配其中只有单词 INVALID 的行吗?这可以通过简单的字符串函数 来实现(如果你坚持使用正则表达式):

^INVALID$ # look for INVALID from start to end of the line

另见 a demo for this one on regex101.com