构建正则表达式以定义常规语言

时间:2014-05-14 13:31:32

标签: regex regular-language

语言是由下一个条件定义的无限链。

条件:

1) The language chains may consist of symbols from the set {1,a,b}. 
2) The language chains always start from subchain '1a'.
3) Every languange chain has to include at least one subchain 'aa'.

例如:

1aa, 1abaa, 1aaab, 1aab1a, ... etc.

我的决定是:

1a (1+a+b)* a (1+a+b)*

但我不太确定它是否正确。这是对的吗?

2 个答案:

答案 0 :(得分:3)

您的解决方案将无效条件3.它将仅确保a子链。例如,它将匹配不包含1abab的{​​{1}}。这是我发现的工作:

aa

这从1a开始。然后根据下一个字符是否为a(如1aa,它将满足btw的所有3个条件),搜索1,a和b的任意组合或其中1a(a[1ab]*|[1ab]*aa[1ab]*)的任意组合。

注意:在您的正式语言表示法中,给定的正则表达式如下:

aa

答案 1 :(得分:0)

我相信你不能形成一个与所有人匹配的正则表达式,只能匹配符合你标准的字符串。