正则表达式匹配0和1的字符串,没有'011'子字符串

时间:2010-04-17 09:53:11

标签: regex compiler-construction grammar automata

我正在研究一个问题(来自自动机理论,语言和计算机介绍,由Hopcroft,Motwani和Ullman编写)来编写一个正则表达式,定义一个由{{的所有字符串组成的语言1}} s和0不包含子字符串1

答案011是否正确?如果不是这个应该是什么正确的答案?

2 个答案:

答案 0 :(得分:9)

Automata diagram 编辑:更新以包括开始状态和修复,如下面的注释。

答案 1 :(得分:4)

如果您要查找没有011作为子字符串的所有字符串,而不是简单地排除字符串011

一个典型的正则表达式是:

1*(0+01)*

基本上你可以在开头就有你想要的那么多,但是一旦你达到零,它就是零或者跟随零(因为否则你会得到一个零)

现代的,非常规的正则表达式将是:

^((?!011)[01])*$

但是,如果你想要任何不是011的字符串,你可以简单地枚举短字符串和通配符:

λ+0+1+00+01+10+11+(1+00+010)(0+1)*

在现代正则表达式中:

^(?!011)[01]*$