如何否定正则表达式语句?

How do I negate a regex statement?

我一直在玩正则表达式高尔夫,并确定了一个正则表达式,其中包含我不应该匹配的所有单词和 none 我应该匹配的单词。我的想法是我可以简单地否定正则表达式然后得到相反的结果(包括我应该匹配的所有单词和其他单词的 none )。

我想出的正则表达式 (\w)(\w) 匹配任何具有模式 abba 的东西,所以我认为使用否定环视 (?!(\w)(\w)) 会匹配任何不属于模式 [=] 的东西11=] 但是现在它只是突出显示所有内容,如果你想尝试一下,这里是 URL:http://regex.alf.nu/4

在我看来,您想排除 包含 那些重复符号的匹配字符串。因此,您需要在要测试重复的字符前添加 \w*(0 个或多个单词字符)。

使用

^(?!\w*(\w)(\w)).*
    ^^^    

参见regex demo

因此,(?!\w*(\w)(\w)) 前瞻在字符串的开头执行以下检查:如果有 0+ alphanumeric/underscore 个字符后跟 1 和 2 个字符,然后是第 2 个和然后第一个捕获的字符,没有返回匹配(匹配失败)。

如果您不打算匹配文本(即如果您只是检查是否匹配),则不需要 .* 部分。但是,如果要排除匹配空字符串,只需使用 .+ 而不是 .*+ 匹配 1 次或多次出现的量化子模式 ).