限定符和空匹配

更新:2007 年 11 月

限定符 *、+、{n,m}(及其“惰性”对等符号)永远不在空匹配后重复(在匹配了最小数目 n 后)。此规则避免限定符在 m 是无限时进入空匹配上的无限循环(即使 m 不是无限时,该规则也适用)。

例如,(a?)* 匹配字符串“aaa”并以模式 (a)(a)(a)() 捕获子字符串。注意,由于第四个空捕获使限定符停止重复,因此没有第五个空捕获。

同样,(a\1|(?(1)\1)){0,2} 与空字符串而不是“a”匹配,因为它从不尝试扩展 ()(a).。{0,2} 限定符只允许在最后一次迭代中有空匹配。与之不同的是,(a\1|(?(1)\1)){2} 实际与“a”匹配,原因是:它确实会尝试扩展 ()(a);最小迭代次数为 2,可强制引擎在空匹配后重复。

请参见

其他资源

.NET Framework 正则表达式