我正在研究此stackoverflow链接(Regular expression for odd number of a's)中提出的问题,要求该链接为a
上奇数Σ = {a,b}
的字符串找到正则表达式。
最有效的最高答案给出的答案是b*(ab*ab*)*ab*
。
我很困惑-a
刚好位于最后一个b*
之前,此顺序实际上有关系吗?为什么不能改为b*a(ab*ab*)*b*
(将a
放在第一个b*
之后)或它的任何其他排列?
[令我感到困惑的另一件事是为什么它是(ab*ab*)*
而不是(b*ab*ab*)*
。 b*ab*ab*
是不是“精确地具有2 a
”的更准确定义?
为什么不能改为b*a(ab*ab*)*b*
?
这将要求字符串在第一个非前导a
之前具有两个连续的b
,不是吗?例如,abaa
何时不匹配。另一方面,将整个ab*
部分移到起点(b*ab*(ab*ab*)*
)也可以。
为什么是(ab*ab*)*
而不是(b*ab*ab*)*
?
(b*ab*ab*)*
正在工作,但是第一个b*
是非常多余的,因为剩下的b
将与组中的最后一个b*
匹配。该组之前还有一个b*
,这导致b*
无法匹配任何内容,因此是多余的。