如何从正则表达式中的匹配项中排除精确字符串(而不是子字符串)?

时间:2014-09-20 15:53:20

标签: regex

我在这里找到了很多关于如何从结果中排除子字符串的问题,但是我想要排除完全匹配的行,并且根本无法弄清楚如何去做。

根据下面的测试数据,我如何匹配11111 之外的所有内容?

0
1
00
01
10
11
000
001
010
011
100
101
110
111
0000
0001
0010
0011
0100
0101
0110
0111
1000
1001
1010

我尝试过各种各样的事情,比如:

^((?!11|111).)*$

但这排除了子串匹配,再次我想要排除完全匹配。

正则表达式可以实现吗?如果是这样,如何排除完全匹配?

2 个答案:

答案 0 :(得分:6)

您需要将负载包含包含在负面展示中:

^(?!(11|111)$).*$

See live demo(使用您的数据)

如果没有包含行尾,那么你只是断言输入不是启动 11111,当你想要断言时是整个输入(从头到尾)不是11111

答案 1 :(得分:1)

通过PCRE动词(*SKIP)(*F)

^(?:11|111)$(*SKIP)(*F)|.+

DEMO

^(?:(?!^(?:111|11)$).)++$

DEMO