匹配奇数个a和奇数个b的正则表达式被判定错误,求问题排查
匹配奇数个a和奇数个b的正则表达式问题分析
你的这个正则表达式存在两个核心问题,导致它无法正确匹配所有符合要求的字符串,还可能匹配不符合要求的内容:
1. 无法覆盖全部符合条件的目标字符串
表达式里的a+aaa要求匹配至少4个连续a(a+匹配1个及以上a,后续必须紧跟3个a,总长度≥4),同理b+bbb要求匹配至少4个连续b。这直接导致很多满足“奇数个a+奇数个b”的字符串无法被匹配:
- 比如
aaab(3个a+1个b):3个a达不到a+aaa的最少长度要求,且整个字符串结尾不是ab或ba,正则完全无法匹配; - 再比如
abbb(1个a+3个b):3个b达不到b+bbb的最少长度要求,字符串开头的ab后还有两个b,正则无法匹配整个字符串。
2. 可能匹配不符合要求的字符串
正则的前置部分((a+aaa)*(b+bbb)*(a+aaa)*(b+bbb)*(a+aaa)*)*无法保证其中的a、b数量都是偶数。当前置部分产生奇数个a或奇数个b时,加上末尾的ab/ba(各含1个a和1个b),会让总a数或总b数变成偶数,最终匹配不符合规则的内容。
举个例子:字符串aaaaabbbbab,前置部分匹配5个a(奇数)和4个b(偶数),末尾匹配ab,最终总a数是6(偶数)、总b数是5(奇数),完全不符合“奇数个a+奇数个b”的要求,但会被你的正则错误匹配。
内容的提问来源于stack exchange,提问作者sachin yadav
相关产品推荐
相关产品推荐

