如果字符串完全匹配,如何否定正则表达式

时间:2016-07-06 04:34:04

标签: regex regex-negation

在发布此问题之前,我已经阅读了Regex Wiki以及以下SO问题:

How To Negate Regex

RegEx to exclude a specific string constant

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

(?!INVALID).*$

请参阅http://refiddle.com/refiddles/577c888075622d5f3e125700

第一篇SO帖子在编辑发布的正则表达式后实际上解决了我的问题

我工作的问题是当单词以INVALID开头时正则表达式失败

基本上是这样的:

  • TestINVALID 可以使用
  • TestINVALID123 可以使用
  • INVALID将无法匹配我想要的内容,因此将起作用
  • INVALIDTest不起作用,不匹配

我希望正则表达式不匹配,并且只有当字符串完全匹配“INVALID”

2 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:0)

您可能想尝试驯服贪婪令牌

^(?:(?!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