正则表达式:拥有除 bba 和 abb 之外的所有字符串

Regular Expression: Having All strings except bba and abb

我正在研究正则表达式,有一个关于制作正则表达式的问题,该正则表达式的字符串至少包含 bbaabb 但不能同时出现。

我为此做了以下表达。

a*(baa*)b+b(a*ab)a

但是,我想到了一个问题来制作一个正则表达式,其中包含除 bbaabb

之外的所有字符串

现在一头雾水

请帮忙。

注意:它是关于自动机的,不是JavaScript或PHP正则表达式......

您可以使用具有正负前瞻的交替来断言其中一个变体不存在而另一个变体存在,反之亦然。

^(?:(?=.*abb)(?!.*bba)|(?!.*abb)(?=.*bba)).*$

Regex demo

如果两者都不存在,您可以使用:

^(?!.*(?:abb|bba)).*$

试试正则表达式 ^(?!(.*abb.*bba|.*bba.*abb)).*$

这将匹配包含 abbbba 而不是两者

的字符串

Regex

如果是自动机,答案不就是

b(aa*b + a)* + (aa*b + a)* + b*         
// First one:  words like baaaaabaababab, baaa, babaaaaaa 
// Second one: words like aaaaabaababab, aaaaaa, aab
// Third one:  words like bbbbb, b, , bbb

因为你不能输入 bb,除非它是正则表达式中唯一的词

a^+表示至少有一个a,可以用aa*代替