2016-05-25 87 views
5

我一直在玩正则表达式高尔夫球,并确定了一个正则表达式,它涵盖了所有我不应该匹配的词,也没有包含我应该匹配的词。这个想法是,我可以简单地否定正则表达式,然后得到相反的结果(包含我应该匹配的所有单词,而不包括其他单词)。如何否定正则表达式?

我想出(\w)(\w)\2\1正则表达式匹配任何带有图案abba,所以我想利用负环视(?!(\w)(\w)\2\1)将匹配我什么不是模式abba的但是现在它只是突出了一切,这里的网址,如果你想试试看:http://regex.alf.nu/4

+0

如果这是一个选项,使用'grep -v' –

+2

像'^(?!\ w *(\ w)(\ w)\ 2 \ 1)。*'? –

+0

@InnocentBystander它是一个基于Web的界面,所以grep是不允许的 – sreya

回答

3

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

使用

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

regex demo

因此,(?!\w*(\w)(\w)\2\1) lookahead会在字符串的开头执行以下检查:如果有0个字母数字/下划线字符,后跟第1,2个字符,然后是第1个捕获的字符,则no匹配被返回(匹配失败)。

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

+0

啊,锚是必要排除空字符串然后是? – sreya

+0

不,为了确保字符串不为空,最后可以使用'。+'。你只是没有精确地预测空比赛的预期行为。 –