我的字母是{0,1}
。我希望将令牌与奇数(或偶数)符号匹配,但它必须包含至少一个0
和至少一个1
。我试过这个正则表达式:
^(?=0*?1)(?=1*?0)[01](?:[01]{2})*
但如果输入为11111
并且输入不正确,则匹配111110
。
答案 0 :(得分:2)
因为这听起来像自动机理论,所以这是基于此的答案。
你应该能够在下面提出7状态DFA:
点击图片查看放大版本。
左边的DFA是偶数长度字符串,右边的DFA是奇数长度字符串。状态上的标签是“[当前长度(奇数或偶数)] / [0遇到] [遇到1]”。
然后您可以solve the equation for the final state ...或者只使用JFLAP为您完成所有这些操作。
奇数长度字符串的正则表达式(可用于您最喜欢的正则表达式):
((11)+0|(00)+1|(10|01|(11)+10|(00)+01)[10])([10]{2})*
对于偶数长度的字符串:
(10|01|(11)+(10|0[10])|(00)+(01|1[10]))([10]{2})*