Regex 正则表达式—最多包含一对连续1';s

Regex 正则表达式—最多包含一对连续1';s,regex,unix,Regex,Unix,如何在UNIX正则表达式中表示最多包含一对连续1的字符串? 可接受字符串的一些示例:0、1、11、12、22、11221212、22112123456等。 不接受的:111、11311、311311311等。这应该可以: ^([^1]+|1[^1])*(11)?([^1]|$)([^1]+|1[^1]|1$)*$ 在电视上看 说明: ([^1]+|1[^1])* 这将匹配不包含连续1的任何内容,方法是匹配不包含1的任何内容,或者匹配后跟其他内容的1 (11)?([^1]|$) 下一部分将匹

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

可接受字符串的一些示例:0、1、11、12、22、11221212、22112123456等。 不接受的:111、11311、311311311等。

这应该可以:

^([^1]+|1[^1])*(11)?([^1]|$)([^1]+|1[^1]|1$)*$
在电视上看

说明:

([^1]+|1[^1])*
这将匹配不包含连续1的任何内容,方法是匹配不包含1的任何内容,或者匹配后跟其他内容的1

(11)?([^1]|$)
下一部分将匹配两个连续的1(如果存在),后跟不同的字符或字符串的结尾。因此,它将匹配一对1,而不是后跟另一个1

([^1]+|1[^1]|1$)*
最后一部分与第一部分非常相似,只是它允许字符串以单个1结尾


如果您可以使用更丰富的regex方言(如Perl方言),那么这个模式会简单得多。在标准unix正则表达式中,不能使用lookaround表达式。下面是一个Perl模式:

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

共享输入和预期输出UNIX/Linux中使用的正则表达式语言。例如:@merlin2011对“UNIX正则表达式”的合理解释是,它是IEEE 1003.1标准A.k.A.POSIX A.k.A.单一UNIX规范所描述的正则表达式语法。单击,然后在左下窗格中选择第9章。这就留下了一个悬而未决的问题:它是“BRE”还是“ERE”regex.@Kaz,谢谢你的澄清。我不知道有一个特定于操作系统的正则表达式,而不是一个特定的工具。所以,可能是
^([^1]+|1[^1])*(11)?([^1].$)([^1]+|1[^1]| 1$)*$
@MattCremeens如果我理解正确,OP希望在输入字符串中允许单个
1
数字。他提到
221112121
是一个有效的输入,所以
1121
也应该是有效的。@Lucastzesniewski,我同意,
1121
应该是有效的。这就是我提供修改的原因。如果我没有弄错的话,您的正则表达式与
1121
不匹配。您提供的一个最优秀的解决方案,我只是认为它省略了这个实例。我刚刚检查了regex101,它显示它与
1121
匹配,但我想这是误导性的。似乎
1[^1]
1\n
匹配,如果没有换行符,整个过程将不匹配。我包括了你的建议,谢谢!好的地方。伙计们,对这个模式的解释会很好,我很难理解这一点。