正则表达式的最小长度

时间:2012-02-15 06:11:34

标签: regex formal-languages

在课上做作业,我来到这个问题:

对于以下每个正则表达式,给出最小的长度字符串 不是表达式定义的语言。

  1. (bb)*(aa)*b*
  2. a*(bab)*∪b∪ab
  3. 我将尝试仅在第一个上获得帮助,看看我是否可以弄清楚第二个。以下是我所知道的:Kleene *表示0个或更多可能的元素。并且集合的并集是包含集合a和集合b的所有元素而不重复元素的集合。通过插入lambda来解决第一个问题,我得到:

    第一轮:bbaab
    第二名:bbbbaabaabbaabbbbaab
    第3名:bbbbbbaabaabbaabbbbaabaabbbabaabbaabbbbaabbbbbbaabaabbaabbbbaab

    如果我正确地执行此操作,则长度为0到5的字符串不在语言中。我这样做了吗?

1 个答案:

答案 0 :(得分:3)

第一个正则表达式匹配任何以偶数个'b'(零包含)开头,后跟偶数个'a'(零可以),然后是一些'b'的单词。

这意味着空字符串使用语言,以及字符串“b”。 但是,字符串“a”不在语言中。

因此,语言中不包含的所有最小长度字符串都是“a”。


第二个正则表达式匹配“”,“a”和“aa”(由*(bab)*)以及“b”和“ab”。 但是它与“ba”和“bb”不匹配。

因此,最小字符串的长度为2:“bb”和“ba”。