字母表上的字符串{a,b,c,d},其中没有 b
紧跟 a
并且没有 c
立即通过 d
。
这是我想出的,但在某些情况下它失败了。 你能告诉我我做错了什么吗?
a*(a|d)*(b(c|d|b)+)*(c(a|b|c)+)*(d(a|b|c|d)+)*
最佳答案
使用否定的前瞻性非常简单:
^(?!.*(ba|cd))[a-d]*
解释:
(ba|cd)
表示或者ba
或cd
^(?!.*(ba|cd))
表示从一开始就向前看(不消耗)(^
),应该不 是输入 (.*
) 中的任何位置,ba
或cd
[a-d]*
表示任意数量的 a,b,c 或 d
关于以下语言的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9122358/