如何否定正则表达式语句?
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 次或多次出现的量化子模式 ).
我一直在玩正则表达式高尔夫,并确定了一个正则表达式,其中包含我不应该匹配的所有单词和 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 次或多次出现的量化子模式 ).