是否可以使用有限正则表达式表达具有无限数量字符串的语言?

时间:2015-03-21 22:02:28

标签: regex regular-language finite-automata

我试图理解如何为某些语法生成正则表达式,我认为这些语法是“无限的”。我有以下Σ = {0,1}我想到了以下三个案例,这是我给出的猜测。

  1. 包含0且以11结尾的所有字符串的集合。我的正则表达式如下:0+ [1*] [0*] 1+ 1。但是,我知道这个表达式不会涵盖该集合中所有现有字符串的集合。
  2. 包含至少两个连续1 s的所有字符串的集合。我的正则表达式如下:1 1+ [0+] [1+] 1。与第一点相同的问题。
  3. 所有字符串的集合,以0开头且没有连续两个1 s。我的正则表达式如下:0+ 1 0+ 1 [0+]。与第一点和第二点相同的问题。
  4. 我的问题如下:是否有可能用具有有限正则表达式的无限数量的字符串来表达这些语言。如果是,究竟是怎么回事? 谢谢。

1 个答案:

答案 0 :(得分:3)

是的,任何常规语言都可以被有限自动机识别,并且常规语言可以表达无限数量的匹配字符串。解决你的三个例子:

  1. 0 (0|1)* 1 1
  2. (0|1)* 1 1 (0|1)*
  3. 0+ (1 0+)+ 1?