什么是通过语言 {0,1} 接受所有内容但没有子字符串 110 或 101 的正则表达式?
接受:
- 111111
- 000011111
- 100001000001001
- 010
- 1
拒绝:
- 100110
- 010100
- 123
编辑:根据下面对答案的评论,这个问题要求一个正式的正则表达式。
这是解决方案(即使没有前瞻):
/^0*(11*$|10$|100+)*$/
你最好检查它是否不匹配/101|110/
假设您的正则表达式引擎支持前瞻,这似乎可行。
/^(1(?!01|10)|0)*$/
仅限于正式的正则表达式表示法:
((1|0*|0*1)(000*))*0*(10*|1*)
这应该有效:
/^([01])\1*$/
对应的 DFA 很容易绘制。
当受到公认的“正式”正则表达式语法的限制时,没有相应的有限大小的正则表达式(缺少完整代数中必需的“and”、“xor”、“not”等琐碎的运算符)
但是有很多解决方案,比如这个
(0|100|(1|10|11*)$)*
它也可以通过所有格匹配来解决。(111+$) 是 111++