regex 如何仅当字符串完全匹配时才对正则表达式求反

b4qexyjb  于 2023-05-08  发布在  其他
关注(0)|答案(2)|浏览(90)

在发布这个问题之前,我已经浏览了Regex Wiki和以下SO问题:
How To Negate Regex
How to exclude a specific string constant?
以下是我已经得到的工作,这是我想要的部分:

(?!INVALID).*$

第一篇SO文章实际上在编辑了发布的正则表达式后稍微解决了我的问题
问题是当单词以INVALID开头时,正则表达式会失败
所以基本上:

  • TestINVALID将工作
  • TestINVALID123将工作
  • INVALID将不匹配这是我想要的所以将工作
  • 但是INVALIDTest不行,不匹配

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

vq8itlhq

vq8itlhq1#

你需要把$包括在你的负面展望中:

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

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

r8uurelv

r8uurelv2#

你可能想试试tempered greedy token

^(?:(?!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也可以。

相关问题