正则表达式取决于字符数和特定字符的存在

时间:2014-11-11 16:29:27

标签: regex symbols

我的字母是{0,1}。我希望将令牌与奇数(或偶数)符号匹配,但它必须包含至少一个0和至少一个1。我试过这个正则表达式:

  

^(?=0*?1)(?=1*?0)[01](?:[01]{2})*

但如果输入为11111并且输入不正确,则匹配111110

1 个答案:

答案 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})*