0和1的字符串的正则表达式是什么,偶数个零和偶数个?
我有类似(1*01*01*)*(0*10*10*)*
的内容。
看起来不错吗?
答案 0 :(得分:12)
嗯,这可能是功课,但是到底是什么:
^(00|11|(01|10)(00|11)*(01|10))*$
编辑:简化!
答案 1 :(得分:6)
1100是该语言,但与您的表达不符。 10101不在语言中, 但你的表达与之匹配。
我建议首先绘制DFA。有一个非常明显的4状态机器识别这种语言。 (是否可以做得更好?)空字符串是语言,因此开始状态是接受状态。还有其他接受状态吗?对于不接受状态S,是 有一个前缀,从开始 - > S?有没有办法从S回到S而没有达到接受状态?是否有后缀使您从S回到接受状态?
答案 2 :(得分:1)
您给定正则表达式的反例是01010101
。
您可能会发现为此特定问题编写正则表达式是不可能的(除非您使用一些非常规扩展名正则表达式语言)。
如下面的Jim Lewis所说,这确实应该是一个可以解决的问题。
答案 3 :(得分:-1)
@tmp = $str =~ /0/g;
print scalar @tmp % 2 == 0 ? 'even' : 'odd';