正则表达式 - 最多包含一对连续1的字符串

时间:2014-07-10 18:28:42

标签: regex unix

如何表达 UNIX正则表达式中最多包含一对连续1对的字符串

接受字符串的一些示例:0,1,11,12,22,112221212,22112121,23456等。 不接受的:111,11311,3111311等。

1 个答案:

答案 0 :(得分:1)

这应该有效:

^([^1]+|1[^1])*(11)?([^1]|$)([^1]+|1[^1]|1$)*$

regex101上查看。

说明:

([^1]+|1[^1])*

这将匹配任何不包含连续1的内容,方法是匹配任何不包含1或1后跟其他内容的内容。

(11)?([^1]|$)

下一部分将匹配两个连续的1(如果存在),后跟一个不同的char或字符串的结尾。所以它会匹配一对1而不是另一个1。

([^1]+|1[^1]|1$)*

最后一部分与第一部分非常相似,只不过它允许字符串以单个1结束。


如果您可以使用更丰富的正则表达方言(如Perl方言),这种模式会更简单。在标准 unix正则表达式中,您无法使用外观表达式。这是一个Perl模式:

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