二进制数的最短正则表达式,偶数为0或奇数为1

use*_*290 23 regex finite-automata regular-language

写一个包含偶数个0或奇数个1的表达式

我把它归结为:

1*(01*01*)* + 0*10*(10*10*)*
Run Code Online (Sandbox Code Playgroud)

其中第一部分表示偶数个0,第二部分表示奇数个1

但是,应该有一个我没有看到的简化解决方案.有小费吗?

Jul*_*ano 19

奇数1部分: 0*1(0|10*1)*

Even-0s部分取决于:

  1. 空字符串是正确的: (1|01*0)*
  2. No-0s是偶数0: (1|01*0)+
  3. 必须至少有两个0 :( 1*(01*01*)+如在OP中)

旧答案:在案例1和案例2下更正

(1*(01*0)*)+ | 0*1(0*(10*1)*)*
Run Code Online (Sandbox Code Playgroud)

感谢@OGHaza提供的有用评论.


Ruu*_*man 11

利用偶数长度字符串始终满足您的约束这一事实:

^(([01]{2})*|1*(01*01*)*)$
Run Code Online (Sandbox Code Playgroud)