正则表达式 – 我需要一些帮助来缩短这个正则表达式

我目前正试图进入学校的正则表达式,并且必须完成任务以缩短这个正则表达式:

r = 0(e + 0 + 1)* + (e + 1)(1 + 0)* + e

e是空字epsilon.

到目前为止,我得到了这个:

r = 0(0 + 1)* + 1(1 + 0)* + e

考虑规则

r* = (e + r)*

但是,我真的不知道如何继续.如果不是kleene星操作符,我可以使用分配法,但这不适用于此.我无法确定一个合适的法律继续这个正则表达式.

有用的提示吗?

编辑:

我想通过形成r来进一步向前迈进了一步

r = 0(1 + 0)* + 1(1 + 0)* + e

然后能够将它结合起来

r = (0 + 1)(0 + 1)* + e

那是对的吗?

此外,我们可以说

r = (0+1)*

这应该是最终形式

最佳答案 除了一件事,我会说你自己的演绎是正确的.拿你原来的

r = 0(e + 0 + 1)* + (e + 1)(1 + 0)* + e

根据你的空白去除e,离开

r = 0(0 + 1)* + 1(1 + 0)*

或者用简单的单词0后跟任意数字的0或1或1,后跟任意数字的1或0.
因此,左侧表示必须至少有一个0,而右侧必须有一个1.这意味着必须至少有一个0或1.现在,你的正则表达式是我的一个我从来没有见过所以我不知道如何表达你的味道中的一个或多个(通常是一个)所以我会用常规正则表达式来表达它,这将是

r = [01]+

这意味着至少一次或多次重复一次或多次.

问候.

点赞