正则表达式只有union,concat,*,+和epsilon

时间:2014-09-17 23:52:26

标签: regex

有两个问题,我不能只为所有情况下降。这两个问题中使用的语言是{a,b,c}

  
      
  1. a,b和c的所有字符串都不包含紧随任何b的
  2.   

到目前为止,我有(a|c|b(bc+|b*c))*在某些情况下有效,但在b结束时需要连续两个b,我不知道如何解决。

  
      
  1. a,b和c的所有字符串不超过2 b和2 a。
  2.   

我知道这必须是格式为c*(a|b)c*(a|b)c*的东西......但是我不知道如何“计算”a和b的比较,因为我知道用这些符号计算正则表达式是不可能的。< / p>

任何帮助我指明正确方向的帮助都会有所帮助,即使它需要问题范围之外的符号。

1 个答案:

答案 0 :(得分:1)

  1. 要允许b在最后添加b*

    (a|c|b(bc+|b*c))*b*
    

    你可以简化一些。不需要+中的bc+,因为c之后|c|已经涵盖了b(bc|b*c)的可能性。这留下b(b*c),可以简化为b+c,后者又缩减为(a|b+c|c)*b* 。最终结果:

    aabb|abab|abba|baab|baba|bbaa
    
  2. 一个不优雅的答案是列出2 a和2 b的所有安排。

    ?

    添加x?以便它们都是可选的,满足“最多2”的要求。您可以假装每个(x|ε)都是a?a?b?b?|a?b?a?b?|a?b?b?a?|b?b?a?a?|b?a?b?a?|b?a?a?b?

    c*

    然后拍打c*a?c*a?c*b?c*b?c*|c*a?c*b?c*a?c*b?c*|c*a?c*b?c*b?c*a?c*| c*b?c*b?c*a?c*a?c*|c*b?c*a?c*b?c*a?c*|c*b?c*a?c*a?c*b?c* 到处都是。

    {{1}}

    男孩,我不为这个答案感到自豪。