Cuantificadores y coincidencias vacías
Actualización: noviembre 2007
Los cuantificadores *, +, {n,m{ Esta regla impide que los cuantificadores entren en bucles infinitos de coincidencias vacías, cuando m es infinito (aunque la regla se aplica aunque m no sea infinito).
Por ejemplo, (a?)* coincide con la cadena "aaa" y captura subcadenas del patrón (a)(a)(a)(). Observe que no se produce una quinta captura vacía, porque en la cuarta captura vacía el cuantificador deja de repetirse.
Del mismo modo, (a\1|(?(1)\1)){0,2} coincide con la cadena vacía en lugar de con "a", porque nunca prueba la expansión ()(a). El cuantificador {0,2} sólo permite coincidencias vacías en la última iteración. En cambio, (a\1|(?(1)\1)){2} coincide realmente con "a", ya que prueba ()(a); el número mínimo de iteraciones, 2, obliga al motor a repetir la coincidencia después de una coincidencia vacía.