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

7
我在这里发现了很多关于如何从结果中排除子字符串的问题,但我想要排除精确匹配的行,却无法弄清楚如何做到这一点。
通过以下测试数据,我该如何匹配除了 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).)*$

但这不包括子字符串匹配,而我又想排除完全匹配的情况。

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


也许这是一些非正则表达式的任务?也就是说,进行一些简单的字符串比较,完全不需要使用正则表达式? - Uwe Keim
2个回答

9
您需要在负向前瞻中包含行尾
^(?!(11|111)$).*$

查看实时演示(使用您的数据)

如果不包括行末标志符,那么您只是断言输入不以11111开头,而您需要断言的是整个输入(从开头到结尾)都不是11111


1

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

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

演示

或者

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

演示


为什么你的负向先行断言在组内?这会使正则表达式变得更慢... - Jerry
你可以使用 111? 来匹配 11111 - Jerry

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接