我正在研究一个问题(来自自动机理论,语言和计算机介绍,由Hopcroft,Motwani和Ullman编写)来编写一个正则表达式,定义一个由{{的所有字符串组成的语言1}} s和0
不包含子字符串1
。
答案011
是否正确?如果不是这个应该是什么正确的答案?
答案 0 :(得分:9)
编辑:更新以包括开始状态和修复,如下面的注释。
答案 1 :(得分:4)
如果您要查找没有011
作为子字符串的所有字符串,而不是简单地排除字符串011
:
一个典型的正则表达式是:
1*(0+01)*
基本上你可以在开头就有你想要的那么多,但是一旦你达到零,它就是零或者跟随零(因为否则你会得到一个零)
现代的,非常规的正则表达式将是:
^((?!011)[01])*$
但是,如果你想要任何不是011
的字符串,你可以简单地枚举短字符串和通配符:
λ+0+1+00+01+10+11+(1+00+010)(0+1)*
在现代正则表达式中:
^(?!011)[01]*$