正则表达式 - 最多两对连续

时间:2012-03-17 17:52:47

标签: regex nfa

我正在学习计算课程,该课程也讲授正则表达式。有一个我无法回答的难题。

查找接受包含最多两对连续0的单词的语言的正则表达式。字母表由0和1组成。

首先,我制作了该语言的NFA,但无法将其转换为GNFA(后来转换为正则表达式)。我怎样才能找到这种常规表达方式?是否将其转换为GNFA?

3 个答案:

答案 0 :(得分:3)

(因为这是一个家庭作业问题,我假设你只是想要足够的帮助才能开始,而不是一个完整的解决方案?)

您的里程可能会有所不同,但我确实建议您尝试将NFA转换为正则表达式。这两个在理论上是等价的,要么可以在算法上转换成另一个,但在我看来,它不是构建任何一个的最直观的方法。

相反,一种方法是首先列举各种可能性:

  • 根本没有连续的零对;也就是说,除了字符串的末尾之外,每​​个零必须后跟一个。因此,该字符串由101的混合序列组成,可选地后跟0

    (1|01)*(0|ε)
    
  • 正好是一对连续的零,在字符串的末尾。这与前一个非常相似:

    (1|01)*00
    
  • 正好是一对连续的零,在字符串的末尾 - 因此,必然后跟一个。这与第一个非常相似:

    (1|01)*001(1|01)*(0|ε)
    

要继续这种方法,您可以扩展上述内容以支持连续零的两对;最后,您将所有这些合并为一个正则表达式。

答案 1 :(得分:0)

(0 + 1)* 00(0 + 1)* 00(0 + 1)* +(0 + 1)* 000(0 + 1)*

答案 2 :(得分:-1)

最多包含两对连续0的

(1|01)*(00|ε)(1|10)*(00|ε)(1|10)*