我正在学习正则表达式和语言。我正在处理一些关于给出正则表达式来表示指定语言的问题。我有点坚持的问题是:
提出表达以下内容的正则表达式 语言。 langauge的字母是{a,b}。
所有字符串的语言有两个连续的a,但没有三个 连续的。 (即“aa”,“aabaa”,“babaa”在语言中, 虽然“abab”,“aaaab”不是。)
到目前为止,我的答案是:
(b*(e+a+aa)bb*)* (aa) (bb*(e+a+aa)b*)*
其中'e'是空字符串,'+'基本上用作'或'。
我想我想知道的是,如果我的答案是正确的(我相信它是),并且它是否可以简化?
谢谢你们。
答案 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)*)*$