什么是正则表达式,它接受语言{0,1}上的所有内容但没有子串110或101?
接受:
拒绝:
编辑:根据以下答案的评论,这个问题是要求正式的正则表达式。
答案 0 :(得分:11)
这是解决方案(即使没有预测):
/^0*(11*$|10$|100+)*$/
答案 1 :(得分:6)
你最好检查是否匹配/101|110/
答案 2 :(得分:4)
这似乎有效,假设您的正则表达式引擎支持前瞻。
/^(1(?!01|10)|0)*$/
答案 3 :(得分:3)
仅限正式正则表达式:
((1|0*|0*1)(000*))*0*(10*|1*)
答案 4 :(得分:-1)
这应该有效:
/^([01])\1*$/
答案 5 :(得分:-1)
相应的DFA很容易绘制。
当受到可接受的“正式”正则表达式语法的限制时,没有相应的有限大小的正则表达式(缺少像“and”,“xor”,“not”这样的完整代数中必需的普通运算符)
但是有很多解决方案,比如这个
(0 | 100 |(1 | 10 | 11 *)$)*
它也可以用占有性匹配来解决。 (111 + $)是111 ++