1

我正在学习正则表达式和语言。我正在解决一些关于给出正则表达式来表示指定语言的问题。我有点坚持的问题是:

想出一个表达以下语言的正则表达式。语言的字母表是{a,b}。

具有两个连续 a 但没有三个连续 a 的所有字符串的语言。(即,“aa”、“aabaa”、“babaa”是该语言,而“abab”、“aaaab”则不是)。

到目前为止,我对此的回答是:

 (b*(e+a+aa)bb*)* (aa) (bb*(e+a+aa)b*)*

其中“e”是空字符串,“+”本质上是一个“或”。

我想我想知道我的答案是否正确(我相信它是正确的),是否可以简化?

多谢你们。

4

2 回答 2

1

我相信你的正则表达式是正确的。它确保aa字符串中存在一个,并确保它aaa不存在。至于最简单(这里最简单是主观的),我想说以下更简单:

(b + ab + aab)* aa (b + ba + baa)*

请注意,您实际上可以从您拥有的正则表达式中派生出上述内容。只取aa正则表达式中的部分,我们有:

  (b*(e+a+aa)bb*)*
= (b*bb* + b*abb* + b*aabb*)*
= (b + ab + aab)* 

最后一步有点跳跃,但需要注意的是,所有这些b*' 都是多余的,因为*整个表达式中b存在 ,并且括号内存在 a 。

于 2013-09-23T03:28:10.237 回答
0

我认为这个正则表达式也符合您的语言:

^((ab|b)*aa(ba|b)*)*$
于 2013-09-23T01:21:07.163 回答