如果我想将字符串与As,Bs,Cs匹配,但我的字符串不能包含多于1个B且不超过4Cs?我怎么做这个,不用很长时间?我有一个解决方案,我将字母B和Cs和A *的排列组合在一起。
正则表达式应匹配以下字符串:
AABCCCC
BAAACC
BAACACC
但不是这样的:
AABB
BBBACCC
CACACACC
答案 0 :(得分:2)
你可以使用lookahead:
如果,强制要求至少1 B和1 C:
^(?=[^B]*B[^B]*$)(?=(?:[^C]*C[^C]*){1,4}$)[ABC]+$
否则:
^(?=[^B]*B?[^B]*$)(?=(?:[^C]*C[^C]*){0,4}$)[ABC]*$
<强>解释强>
^ : begining of line
(?= : lookahead, make sure we have:
[^B]*B[^B]* : 0 or more non B arround one B
$ : until end of line
) : end lookahead
(?= : lookahead, make sure we have:
(?: : start non capture group
[^C]*C[^C]* : 0 or more non C arround one C
){1,4} : 1 upto 4 times
$ : until end of line
) : end lookahead
[ABC]+ : 1 or more any of these letters
$ : end of line
答案 1 :(得分:1)
使用(基本)正则表达式是不可能的,因为计数将使语言大于常规语言可以处理的语言。您可以使用the pumping lemma for the regular languages
来证明这一点如果可能,您应列出所有可能的内容。