搜索具有特定条件的字符串

时间:2012-04-18 09:21:57

标签: regex

我正在搜索包含'a'和'b'的字符串的正则表达式,该字符串具有以下两个属性: 1:String具有偶数个字符 2:字符串可能不包含'aa'

3 个答案:

答案 0 :(得分:1)

标准(旧)正则表达式是可能的:

(ab|bb|(ba)*bb)*(ba)*

答案 1 :(得分:1)

怎么样:

/(?=^(?:..)+$)(?!aa)(?=.*a)(?=.*b)/

<强>解释

/         : delimiter
          : control there are an even number of char
  (?=     : positive lookahead
    ^     : begining of string
    (?:   : non capture group
      ..  : 2 characters
    )+    : one or more times
    $     : end of string
  )
          : control there aren't aa
  (?!     : negative look ahead
    aa    : aa
  )
          : control there is at least an a
  (?=     : positive lookahead
    .*a   : at least an a
  )
          : control there is at least a b
  (?=     : positive lookahead
    .*b   : at least a b
  )
/         : delimiter

答案 2 :(得分:0)

使用Perl兼容的正则表达式可以轻松完成: ^(ab|bb|(ba(?!a)))*$

基本上它表示字符串必须包含以任何顺序混合的abbbba子字符串,但ba不能跟随另一个a字符。

字符串将具有均匀长度,因为所有这些子表达式都具有均匀长度。 aa不能出现在字符串中,因为它出现的唯一方法是在子字符串baab中,但正则表达式明确限制ba后跟a