matches()
solo devolverá verdadero si la cadena completa coincide.
find()
intentará encontrar la próxima aparición dentro de la subcadena que coincida con la expresión regular. Tenga en cuenta el énfasis en "el próximo". Eso significa que el resultado de llamar find()
varias veces podría no ser el mismo. Además, mediante el uso find()
puede llamar start()
para devolver la posición de la subcadena.
final Matcher subMatcher = Pattern.compile("\\d+").matcher("skrf35kesruytfkwu4ty7sdfs");
System.out.println("Found: " + subMatcher.matches());
System.out.println("Found: " + subMatcher.find() + " - position " + subMatcher.start());
System.out.println("Found: " + subMatcher.find() + " - position " + subMatcher.start());
System.out.println("Found: " + subMatcher.find() + " - position " + subMatcher.start());
System.out.println("Found: " + subMatcher.find());
System.out.println("Found: " + subMatcher.find());
System.out.println("Matched: " + subMatcher.matches());
System.out.println("-----------");
final Matcher fullMatcher = Pattern.compile("^\\w+$").matcher("skrf35kesruytfkwu4ty7sdfs");
System.out.println("Found: " + fullMatcher.find() + " - position " + fullMatcher.start());
System.out.println("Found: " + fullMatcher.find());
System.out.println("Found: " + fullMatcher.find());
System.out.println("Matched: " + fullMatcher.matches());
System.out.println("Matched: " + fullMatcher.matches());
System.out.println("Matched: " + fullMatcher.matches());
System.out.println("Matched: " + fullMatcher.matches());
Saldrá:
Encontrado: falso
Encontrado: verdadero - posición 4
Encontrado: verdadero - posición 17
Encontrado: verdadero - posición 20
Encontrado: falso
Encontrado: falso
Emparejado: falso
-----------
Encontrado: verdadero - posición 0
Encontrado: falso
Encontrado: falso
Emparejado: verdadero
Emparejado: verdadero
Emparejado: verdadero
Emparejado: verdadero
Por lo tanto, tenga cuidado al llamar find()
varias veces si el Matcher
objeto no se restableció, incluso cuando la expresión regular está rodeada ^
y $
coincide con la cadena completa.
find()
varias veces puede devolver resultados diferentes para el mismoMatcher
. Vea mi respuesta a continuación.