字符串的重复交错副本的正则表达式?

时间:2013-04-25 00:05:33

标签: regex theory regular-language

查找此语言的正则表达式:

  

L = {λ,ab,abac,abacab,abacabac,abacabacab,...}

好的,所以我一直在解决这个问题。到目前为止,我知道'ab'重复其自我(ab)。但我被'ac'难倒......它不能(ab)(ac)* ...... 任何指针都会受到赞赏。

我看了看我的书,没有可以告诉我如何解决这个问题的例子。

1 个答案:

答案 0 :(得分:3)

让我们先简化一下。我们让B表示ab,C表示ac。然后你试图生成字符串

  

λ,B,BC,BCB,BCBC,BCBCB,...

在这种情况下,您可能希望将正则表达式拆分为两种情况:一种生成

  

λ,BC,BCBC,BCBCBC,BCBCBCBC,......

和生成

的人
  

B,BCB,BCBCB,BCBCBCB,......

前者由正则表达式(BC)*给出,后者由正则表达式(BC)*B给出。如果将这些组合在一起,则会得到(BC)* | (BC)*B,可以将其重写为(BC)*(B | λ)。剩下要做的就是通过替换BC with ab and ac`来扩展它,这会产生正则表达式

(abac)*(ab | λ)

这个观察也应该让你为这种语言设计一个DFA或NFA,但我会把它留作练习。 : - )

希望这有帮助!