我正在研究正则表达式,有一个问题是要使正则表达式的字符串至少包含 bba 或 abb 中的一个,而不能同时包含同时。
我为此做了以下表达。
a *(baa *) b + b (a * ab) a
但是,在我的脑海中出现一个问题,要求我做一个正则表达式,使所有字符串都摘除 bba 和 abb
我现在对此感到困惑。
请帮助。
注意:它与自动机有关,而不与JavaScript或PHP Regex有关........
答案 0 :(得分:1)
您可以使用正向和负向查找的交替来断言其中一个变体不存在,而另一个变体存在,反之亦然。
^(?:(?=.*abb)(?!.*bba)|(?!.*abb)(?=.*bba)).*$
如果他们两个都不在那,则可以使用:
^(?!.*(?: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)