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

时间:2018-10-29 06:49:22

标签: regex automata

我正在研究正则表达式,有一个问题是要使正则表达式的字符串至少包含 bba abb 中的一个,而不能同时包含同时。

我为此做了以下表达。

  

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

但是,在我的脑海中出现一个问题,要求我做一个正则表达式,使所有字符串都摘除 bba abb

我现在对此感到困惑。

请帮助。

注意:它与自动机有关,而不与JavaScript或PHP Regex有关........

3 个答案:

答案 0 :(得分:1)

您可以使用正向和负向查找的交替来断言其中一个变体不存在,而另一个变体存在,反之亦然。

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

Regex demo

如果他们两个都不在那,则可以使用:

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

答案 1 :(得分:1)

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

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 *

答案 2 :(得分:0)

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

这将匹配包含abbbba两者都不包含的字符串

Regex