数学:为语言提供正则表达式:

时间:2013-09-22 23:41:09

标签: regex math regular-language

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

  

提出表达以下内容的正则表达式   语言。 langauge的字母是{a,b}。

     

所有字符串的语言有两个连续的a,但没有三个   连续的。 (即“aa”,“aabaa”,“babaa”在语言中,   虽然“abab”,“aaaab”不是。)

到目前为止,我的答案是:

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

其中'e'是空字符串,'+'基本上用作'或'。

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

谢谢你们。

2 个答案:

答案 0 :(得分: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存在于括号内。

答案 1 :(得分:0)

我认为这个正则表达式也匹配你的语言:

^((ab|b)*aa(ba|b)*)*$