Quantificatori e corrispondenze vuote
I quantificatori *, +, {n,m} e le controparti "lente" non si ripetono mai dopo una corrispondenza vuota quando è stata trovata la corrispondenza per il numero minimo n. Questa regola impedisce che di fronte a una corrispondenza vuota i quantificatori entrino in un ciclo infinito quando m è infinito (la regola ha valore anche se m non è infinito).
Ad esempio (a?)*
corrisponde alla stringa "aaa" e cattura sottostringhe nel criterio (a)(a)(a)().
Si noti che non è presente una quinta cattura vuota, poiché la quarta cattura vuota causa l'interruzione della ripetizione del quantificatore.
Allo stesso modo, (a\1|(?(1)\1)){0,2}
corrisponde alla stringa vuota e non ad "a", poiché non esegue mai il tentativo di espansione ()(a).
Nel quantificatore {0,2}
sono consentite solo corrispondenze vuote nell'ultima iterazione. Al contrario, (a\1|(?(1)\1)){2}
corrisponde ad "a", perché esegue il tentativo su ()(a)
. Il numero minimo di iterazioni, ovvero 2, impone la ripetizione del modulo di gestione dopo una corrispondenza vuota.