求仅用|和*的正则:匹配{a,b}中ab、ba出现次数均为偶的字符串
首先你的描述里有个小矛盾:你说要匹配“ab和ba出现次数均为偶数”的字符串,但例子里的aba(ab和ba各1次,都是奇数)却被你列为可接受的情况。结合你提到的“字符切换次数为偶数”,推测你实际想要的可能是切换次数为偶数的字符串(也就是ab和ba的总次数为偶数),或者是ab和ba次数奇偶性相同的字符串(同为奇或同为偶)。下面分两种情况给出符合要求的正则表达式,都只用到|和*操作符:
1. 匹配切换次数为偶数的字符串
这类字符串的字符块数量是奇数(比如全a是1块,aba是3块,abba是3块),对应的正则:
(a*b a*)*a* | (b*a b*)*b*
- 说明:
(a*b a*)*a*覆盖所有以a开头或结尾、切换次数为偶数的字符串,比如aaaa、aba、abba、ababba;(b*a b*)*b*覆盖所有以b开头或结尾、切换次数为偶数的字符串,比如bbbb、bab、baab;
2. 严格匹配ab和ba次数均为偶数的字符串
这类字符串要求ab和ba的转换次数各自都是偶数,对应的正则:
a* | b* | (abba)*a* | (baab)*b*
- 说明:
a*和b*匹配无任何转换的全a或全b字符串;(abba)*a*匹配以a开头/结尾、包含偶数次ab和ba转换的字符串(每个abba贡献1次ab和1次ba,重复偶数次后总次数就是偶数),比如abbaabba、aaaaabbaaaaa;(baab)*b*匹配以b开头/结尾、包含偶数次ba和ab转换的字符串,比如baabbaab、bbbbbaabbbbb;
内容的提问来源于stack exchange,提问作者Elijah Williams
相关产品推荐
相关产品推荐

