为这些语言编写正则表达式?

时间:2013-10-28 18:39:34

标签: regex theory regular-language

以下语言Σ= {0,1}都是常规语言:

  

L = {w | w长度均匀,以01}

开头      

L = {w | w中1的数字是3}的倍数

     

L = {w | w不包含子串10}

我被要求为这些语言编写正则表达式,但我不知道该怎么做。任何人都可以就如何解决这些问题给我建议吗?

2 个答案:

答案 0 :(得分:2)

以下是一些提示:

  1. 您可以使用表达式(0∪1)表示“0或1”,而(0∪1)(0∪1)表示“任意两个字符的字符串”。你可以从第二个表达式中形成所有偶数正则表达式吗?那么你能看到如何从那里获得你需要的语言吗?

  2. 任何具有1的倍数的字符串都可以细分为一串较小的字符串,每个字符串由三个1和0的散布组成。你能把所有的弦都用三个1来制作吗?从那里,你能获得所需的语言吗?

  3. 这实际上是最简单的一群。写出一些不包含10的字符串。注意什么?作为提示,您可以使用四个字符执行此操作。

  4. 希望这有帮助!

答案 1 :(得分:1)

  

L = {w | w长度均匀,以01}

开头

答案 01((0 + 1)(0 + 1))*

说明:01本身的长度为偶数,我们可以为01组成的任何偶数长度字符串后缀。

  

L = {w | w中1的数字是3}的倍数

答案 (0*10*10*10*)*

说明:0可以在字符串中的任何位置显示任意数量的时间限制超过1它应该是3的倍数,因此*超过3 1

  

L = {w | w 包含子串10}

答案 0*1*

说明:字符串不能包含10表示只有1之后才允许1