仅当字符串完全匹配时如何否定正则表达式
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
开头时正则表达式失败
所以基本上 :
TestINVALID
会起作用
TestINVALID123
会起作用
INVALID
不会匹配我想要的所以 会工作
- 但是
INVALIDTest
不行,它不匹配
我希望正则表达式仅在字符串完全匹配时才匹配 "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
在 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
所以基本上 :
TestINVALID
会起作用TestINVALID123
会起作用INVALID
不会匹配我想要的所以 会工作- 但是
INVALIDTest
不行,它不匹配
我希望正则表达式仅在字符串完全匹配时才匹配 "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