我一直在玩正则表达式高尔夫球,并确定了一个正则表达式,它涵盖了所有我不应该匹配的词,也没有包含我应该匹配的词。这个想法是,我可以简单地否定正则表达式,然后得到相反的结果(包含我应该匹配的所有单词,而不包括其他单词)。如何否定正则表达式?
我想出(\w)(\w)\2\1
正则表达式匹配任何带有图案abba
,所以我想利用负环视(?!(\w)(\w)\2\1)
将匹配我什么不是模式abba
的但是现在它只是突出了一切,这里的网址,如果你想试试看:http://regex.alf.nu/4
我一直在玩正则表达式高尔夫球,并确定了一个正则表达式,它涵盖了所有我不应该匹配的词,也没有包含我应该匹配的词。这个想法是,我可以简单地否定正则表达式,然后得到相反的结果(包含我应该匹配的所有单词,而不包括其他单词)。如何否定正则表达式?
我想出(\w)(\w)\2\1
正则表达式匹配任何带有图案abba
,所以我想利用负环视(?!(\w)(\w)\2\1)
将匹配我什么不是模式abba
的但是现在它只是突出了一切,这里的网址,如果你想试试看:http://regex.alf.nu/4
在我看来,你想排除匹配的字符串,包含那些重复的符号。因此,您需要在字符前添加\w*
(0个或更多个字符)来测试重复。
使用
^(?!\w*(\w)(\w)\2\1).*
^^^
因此,(?!\w*(\w)(\w)\2\1)
lookahead会在字符串的开头执行以下检查:如果有0个字母数字/下划线字符,后跟第1,2个字符,然后是第1个捕获的字符,则no匹配被返回(匹配失败)。
如果您不打算匹配文本(即只检查是否匹配),则不需要.*
部分。但是,如果要排除匹配的空字符串,只需使用.+
而不是.*
(+
匹配1次或多次出现次量化子模式)。
啊,锚是必要排除空字符串然后是? – sreya
不,为了确保字符串不为空,最后可以使用'。+'。你只是没有精确地预测空比赛的预期行为。 –
如果这是一个选项,使用'grep -v' –
像'^(?!\ w *(\ w)(\ w)\ 2 \ 1)。*'? –
@InnocentBystander它是一个基于Web的界面,所以grep是不允许的 – sreya