我希望每秒1被0包围。我到目前为止:
0* + 0*10* + 0*10+10+
这是我想要的部分内容。我如何确保每秒1都被0包围?
我需要使用正式的正则表达式。
01010(第二个被0包围)
0110(第二个1不被0包围,不是我想要的)
答案 0 :(得分:0)
使用此模式,如果任何第二个1
未被0's
^(?:[^1]*1[^1]*010)*(?:[^1]*1?[^1]*)$
OR
^(?:[^1]*1[^1]*010)+(?:[^1]*1[^1]*)?$
答案 1 :(得分:0)
如果您输入的字母表(您没有指定)只是0
和1
(它似乎来自您的示例),这大致相当于说&# 34;没有两个连续1
个字符",因为如果奇数1
与另一个1
相邻,则另一个1
将是偶数1
需要被0
包围但不在1
旁边。如果有1
个偶数,那么唯一的其他要求似乎就是1
结束。
考虑到这一点:
0*(10+)* -- no two consecutive 1s, can't end with a 1
如果您想允许以1
结尾,只要奇数1
s:
0*(10+10+)*1?0*
答案 2 :(得分:0)
如果每秒1
被0
包围,则需要找到模式010
。然后,在此之前,您最多只能有一个1
,其中包含任意数量的零。
所以为了匹配第二个被零包围的字符串,它的:
(?:10*(010))
然后只是重复这个问题:
(?:10*(010))+
如果包含其他非01
字符的问题:
(?:[^1]*1[^1]*(010))+[^1]*
这是一个重复组,包含任意数量的非1,1,任意数量的非1,然后是010
,后跟非1。