【问题标题】:Regular Expression: Having All strings except bba and abb正则表达式:拥有除 bba 和 abb 之外的所有字符串
【发布时间】:2018-10-29 06:49:22
【问题描述】:

我正在研究正则表达式,有一个问题是关于使正则表达式的字符串包含 bbaabb 中的至少一个,但不能同时包含同一时间。

我为此做了下面的表达。

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

但是,我的脑海中出现了一个问题,即制作一个除 bbaabb

之外的所有字符串的正则表达式

我现在对此感到困惑。

请帮忙。

注意:它是关于 Automata,而不是 JavaScript 或 PHP Regex ........

【问题讨论】:

    标签: regex automata


    【解决方案1】:

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

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

    Regex demo

    如果他们都不在,你可以使用:

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

    【讨论】:

    • 难道 ^((?!bba)(?!abb).)*$ 就够了吗?
    • @StephanT。当其中任何一个存在时,这将不匹配。
    • @StephanT 我明白你的意思,用于匹配除 bba 和 abb 之外的所有确实匹配的字符串。
    【解决方案2】:

    如果它是一个自动机,答案会不会只是

    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*

    代替

    【讨论】:

    • 关闭,您希望它是 b?(a^+b)* + b*,因为字符串可以选择以单个 b 开头。
    • 哎呀,你是对的,我会立即编辑它:D Thx
    【解决方案3】:

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

    这将匹配包含abbbba 的字符串,而不是两者

    Regex

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-04-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多