如何表达 UNIX正则表达式中最多包含一对连续1对的字符串
接受字符串的一些示例:0,1,11,12,22,112221212,22112121,23456等。 不接受的:111,11311,3111311等。
答案 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).*$