每秒1被0包围,正式正则表达

时间:2015-02-03 03:40:12

标签: regex

我希望每秒1被0包围。我到目前为止:

0* + 0*10* + 0*10+10+

这是我想要的部分内容。我如何确保每秒1都被0包围?

我需要使用正式的正则表达式。

01010(第二个被0包围)

0110(第二个1不被0包围,不是我想要的)

3 个答案:

答案 0 :(得分:0)

使用此模式,如果任何第二个1未被0's

包围,则会失败
^(?:[^1]*1[^1]*010)*(?:[^1]*1?[^1]*)$  

Demo

OR

^(?:[^1]*1[^1]*010)+(?:[^1]*1[^1]*)?$

DEMO

答案 1 :(得分:0)

如果您输入的字母表(您没有指定)只是01(它似乎来自您的示例),这大致相当于说&# 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)

如果每秒10包围,则需要找到模式010。然后,在此之前,您最多只能有一个1,其中包含任意数量的零。

所以为了匹配第二个被零包围的字符串,它的:

(?:10*(010))

然后只是重复这个问题:

(?:10*(010))+

如果包含其他非01字符的问题:

(?:[^1]*1[^1]*(010))+[^1]*

这是一个重复组,包含任意数量的非1,1,任意数量的非1,然后是010,后跟非1。