Mi código:partidos de longitud cero en Java expresiones regulares
Pattern pattern = Pattern.compile("a?");
Matcher matcher = pattern.matcher("ababa");
while(matcher.find()){
System.out.println(matcher.start()+"["+matcher.group()+"]"+matcher.end());
}
Salida:
0[a]1
1[]1
2[a]3
3[]3
4[a]5
5[]5
Lo que sé:
- "? Un" significa cero o una ocurrencia del caracter 'a'.
Java API dice:
- matcher.start() devuelve el índice comienzo del partido anterior.
- matcher.end() devuelve el desplazamiento después del último carácter coincidente.
- matcher.group() devuelve la subsecuencia de entrada que coincide con la coincidencia anterior . Para un matcher m con secuencia de entrada s, las expresiones m.group() y s.substring (m.start(), m.end()) son equivalentes. Y para algunos patrones, por ejemplo, un *, coinciden con la cadena vacía. Este método devolverá la cadena vacía cuando el patrón coincida con la cadena vacía en la entrada.
lo que quiero saber:
- ¿En qué situaciones hace que el motor de expresiones regulares se encuentra con un cero aparición de un personaje (s) dada - Relación carácter 'a'.
- En esas situaciones, ¿cuáles son los valores realmente devueltos por los métodos start(), end() y group() en el emparejador? He mencionado lo que dice la API java. Pero no estoy muy claro cuando se trata de la situación práctica como se indica arriba.
+1 por mencionar la explicación de la conducta del cuantificador codicioso. Pero, ¿qué hay de los últimos 5 [] 5? ¿Por qué siempre agrega 0-ocurrencia al final de cada cadena? – namalfernandolk
Tomemos un ejemplo más simple con la cadena "a". El motor arranca en 0 e intenta hacer coincidir 'a' -> éxito para la primera coincidencia y se mueve hacia la posición 1 -> en la posición 1, intenta una coincidencia de 1 evento -> falla porque se llega al final de la cadena. Todavía puede hacer una coincidencia de 0-ocurrencia -> éxito. Luego se mueve hacia adelante -> final de la cadena -> final de los partidos –
Gracias mucho Guillaume. Pero después de la coincidencia exitosa de 'a' Por qué y cómo se mueve hacia adelante. No hay más índices; y no más personajes ¿No es así? – namalfernandolk