Quantificadores e Correspondências vazias
Quantificadores *, +, { n, m } (e suas contrapartes "lentas") nunca repetem após uma correspondência vazia quando o número mínimo de n tenha sido correspondido.Essa regra impede que quantificadores entrem em loops infinitos em correspondências vazias quando m é infinito (embora a regra se aplique mesmo se m não é infinito).
Por exemplo, (a?)* coincide com a sequência de caracteres "aaa" e capturas substrings no padrão (a)(a)(a)(). Observe que não há uma quinta captura vazia, porque a quarta captura vazia faz com que o quantificador pare de repetir.
Da mesma forma, (a\1|(?(1)\1)){0,2} corresponde a sequência vazia de caracteres em vez de "a" porque nunca tenta a expansão ()(a). O quantificador {0,2} permite apenas correspondências vazias na última interação.Em oposição a isso, (a\1|(?(1)\1)){2} realmente corresponde "a" porque tenta ()(a); o número mínimo de iterações, 2, força o mecanismo a repetir depois de uma correspondência vazia.