Siguiente coincidencia tras una coincidencia vacía

Cuando una coincidencia se repite a lo largo de una cadena, al llamar a NextMatch o al utilizar la colección devuelta por Regex.Matches, el motor de búsqueda de expresiones regulares otorga un tratamiento especial a las coincidencias vacías.

Normalmente, NextMatch inicia la búsqueda de la siguiente coincidencia a partir de la coincidencia anterior exactamente. Sin embargo, tras una coincidencia vacía, NextMatch avanza un carácter antes de intentar buscar la siguiente coincidencia. Esta regla garantiza que el motor de búsqueda de coincidencias avance a lo largo de la cadena. Si no avanzara un carácter, la siguiente coincidencia empezaría exactamente en el mismo lugar que la coincidencia anterior, y encontraría continuamente la misma cadena vacía.

Por ejemplo, una búsqueda de "a*" en la cadena "abaabb" devuelve la siguiente secuencia de cadenas coincidentes.

"a", "", "aa", "", "", ""

Ésta es otra vista, en contexto:

(a)()b(aa)()b()b()

En la primera búsqueda se obtiene la primera a. La segunda búsqueda se inicia exactamente donde terminó la primera coincidencia, antes de la primera b; no encuentra ninguna aparición de a y devuelve la cadena vacía.

La tercera búsqueda no se inicia exactamente donde terminó la segunda coincidencia, ya que la búsqueda de la segunda coincidencia devolvió la cadena vacía. En lugar de ello, la búsqueda se inicia un carácter más allá, después de la primera b. La tercera búsqueda encuentra dos apariciones de a y devuelve "aa".

La cuarta búsqueda se inicia donde terminó la tercera coincidencia, antes de la segunda b, y encuentra la cadena vacía. A continuación, la quinta búsqueda se inicia detrás de la última b y encuentra de nuevo la cadena vacía. La sexta búsqueda se inicia detrás de la última b y vuelve a encontrar la cadena vacía.

Vea también

Otros recursos

Expresiones regulares de .NET Framework