求匹配奇数个a和奇数个b的正则表达式,请求技术协助
解决方案
你的正则存在两个核心问题:
- 错误纳入了单个
a或b的情况:这类字符串中另一种字符的数量为0(偶数),不符合“a、b数量均为奇数”的要求; - 未覆盖中间存在多次
ab/ba转换的混合排列场景(比如ababab、aabbbab这类字符串)。
正确的正则表达式
^(?:(aa|bb)|(ab|ba)(aa|bb)*(ab|ba))*(ab|ba)(aa|bb)*$
逻辑解释
这个正则的核心是利用奇偶性翻转的思路:
aa或bb:增加偶数个相同字符,不改变a、b的奇偶计数;ab或ba:同时增加1个a和1个b,会翻转两者的奇偶性;- 整体结构保证:最终a、b的计数经过奇数次翻转后,从初始的0(偶数)变为奇数,同时允许任意数量的不改变奇偶性的
aa/bb片段穿插其中。
匹配验证
- 符合要求的字符串:
ab、ba、aaabbb、ababab、aabbbab→ 均可匹配; - 不符合要求的字符串:
a、b、abba、aabbb→ 均无法匹配。
简化写法
如果需要更简洁的版本,也可以使用:
^(?:(aa|bb)*(ab|ba))(?:(aa|bb)*(ab|ba))*(aa|bb)*$
内容的提问来源于stack exchange,提问作者Jaffar
相关产品推荐
相关产品推荐

