首先,很明显这是家庭作业,我相信我已经完成了尽职调查。现在我不希望在银盘上给我一个解决方案,只是在正确方向上的简单推动会很好,所以让我开始吧:
问题是:
字母{0,1}上的所有字符串,其中每个奇数长度的块 0后紧跟一个偶数长度的1和1的块 偶数长度为0的块后面紧跟一个奇数长度 1块。
我一直在做的是从头开始一起工作,从:
开始 只匹配0,奇数1: ^[^0]*((00)+1(11)*)*$
只匹配奇数0,即使是1: ^[^0]*(0(00)*(11)+)*$
将它们放在一起: ^[^0]*((00)+1(11)*)*(0(00)*(11)+)*$
我认为这最初有效,但它只适用于:
而不是:
我一直坚持的是弄清楚如何让它适用于上面列出的案例。我试着做一个积极的前瞻,但它似乎没有用。
有没有人有任何指示?
答案 0 :(得分:1)
将它们组合为^[^0]*((00)+1(11)*)*(0(00)*(11)+)*$
只能让你获得一半,因为它仅在所有奇数0偶数1块都在所有偶数0奇数1块之前时才有效。你想要的是一个正则表达式,它匹配零个或多个([^0]*
),然后是奇偶偶数和偶数奇数块的混合 - 有点像(odd-even|even-odd)(odd-even|even-odd)...
,但对于任何数量(零或更多) )奇数偶数或偶数奇数。你怎么能这样做?
答案 1 :(得分:0)
你肯定是在正确的轨道上。
仅匹配0,奇数1:^(00)+1(11)*$
仅匹配奇数0,甚至1:^0(00)*(11)+$
将它们放在一起:^(((00)+1(11)*)|(0(00)*(11)+))+$
只是为了好玩,这是一个较短的输入1
,111
,11111
... ...除非你将零数作为偶数。
^((00)*(01)?1(11)*)+$