2012-04-18 56 views
1

我寻找一个正则表达式的字符串包含“一”和“b”,它具有以下两个属性搜索字符串: 1:字符串有偶数个字符 2:字符串可能不包含“AA”具体情况

+2

这几乎是不可能做到这一点与一个正则表达式。 – kirilloid 2012-04-18 09:26:08

+0

你应该可以用3个正则表达式来做到这一点。每个条件一个:P – ArjunShankar 2012-04-18 09:38:54

+0

字符串只包含'a'和'b'还是'abcd'是一个有效的字符串? – Toto 2012-04-18 09:54:38

回答

0

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

基本上它说,字符串必须由abbbba子以任意顺序混合,但ba不能按照其他a字符。

由于所有这些子表达式的长度都是偶数,所以字符串的长度将会更长。 aa不能出现在一个字符串中,因为它出现的唯一方法是在子字符串baab中,但正则表达式特别限制ba后面跟着a

1

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

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

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