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

时间:2015-09-28 17:32:15

标签: regex

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

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)*

应该是最终形式

1 个答案:

答案 0 :(得分:1)

除了一件事,我说你自己的演绎是正确的。拿你原来的

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

删除根据你的e是空的,离开

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

或用简单的字0 followed by any number of 0 or 1 1 followed by any number of 1 or 0。 因此,左侧表示必须至少有0,右侧必须有1。这意味着必须至少有01。现在,你的正则表达式是我从未见过的,所以我不知道如何用你的味道表达one or more(它通常是+)所以我会在中表达它常规的正则表达式,这将是

r = [01]+

仅表示 at least one 0 or 1 repeated any number of times

问候。