繁体   English   中英

简化正则表达式

[英]Simplify regular expression

我想简化此正则表达式:

0*|0*1(ε|0*1)*00*

我使用了这个身份:

(R+S)*=(R*S*)*=(R*+S*)*

并没有比这更好的了:

0*|0*1(0*1)*00* [(ε|0*1)*=(ε*0*1)*=(0*1)*]

这个正则表达式可以进一步简化吗? 我不知道该怎么办。 :)

编辑1 :我将+更改为| ,for +可以表示“一次或多次”,而交替表示为| 符号说明:

1) ε stands for empty word
2) * is Kleene star
3) AB is just a concatenation of languages of regular expressions A and B.

编辑2 :形式证明,它减少为(0 * 1)* 0 + |ε:

  0*|0*1(ε|0*1)*00* = 
= 0*|0*1(0*1)*0+ =
= 0*|(0*1)+0+ =
= 0+|ε|(0*1)+0+ =
= ε0+|(0*1)+0+|ε
= (ε|(0*1)+)0+|ε
= (0*1)*0+|ε

有什么方法可以将其进一步减小为(0|1)*0|ε吗?

(更新:有关以前错误尝试的漫长而悲伤的故事,请参见编辑历史记录)。

我(现在)认为这可以简化为:

ε|(0|1)*0

换句话说,要么:

  • 空字符串
  • 任何以0结尾的一和零字符串

证明这完全是另一回事。 ;-)

我认为它减少为(0*1)*0+|

我设法将给定的正则表达式形式化为ε|(0 | 1)* 0。 这是证明:

 0*|0*1(ε|0*1)*00* = 
= 0*|0*1(0*1)*0+ =
= 0*|(0*1)+0+ =
= 0+|ε|(0*1)+0+ =
= ε0+|(0*1)+0+|ε =
= (ε|(0*1)+)0+|ε =
= (0*1)*0+|ε =
= (0*1)*0*0|ε = #
= (0|1)*0|ε

窍门是在标有#的步骤中使用身份(A*B)*A* = (A|B)* ,当我问问题时我不知道。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM