expresiones regulares de Java: encontrar la última ocurrencia de una cadena usando Matcher.matches ()

Darshan Mehta:

He siguiente cadena de entrada:

abc.def.ghi.jkl.mno

Número de caracteres de punto puede variar en la entrada. Quiero extraer la palabra después de la última .(es decir, mnoen el ejemplo anterior). Estoy utilizando el siguiente regexy su trabajo perfectamente bien:

String input = "abc.def.ghi.jkl.mno";
Pattern pattern = Pattern.compile("([^.]+$)");
Matcher matcher = pattern.matcher(input);
if(matcher.find()) {
    System.out.println(matcher.group(1));
}

Sin embargo, estoy usando un biblioteca de terceros, que hace juego ( Kafka Conectar para ser exactos) y que sólo puede proporcionar el modelo de expresión regular a la misma. La cuestión es, esta biblioteca (cuyo código no puedo cambiar) utiliza matches()en lugar de find()hacer el juego, y cuando ejecuto el mismo código con matches(), no funciona por ejemplo:

String input = "abc.def.ghi.jkl.mno";
Pattern pattern = Pattern.compile("([^.]+$)");
Matcher matcher = pattern.matcher(input);
if(matcher.matches()) {
    System.out.println(matcher.group(1));
}

El código anterior no se imprime nada. Según el javadoc , matches()intenta hacer coincidir toda la cadena. ¿Hay alguna manera de aplicar la lógica similar utilizando matches()para extraer mnode mi entrada de cadena?

Wiktor Stribiżav:

Puedes utilizar

".*\\.([^.]*)"

Concuerda

  • .*\.- cualquier 0+ caracteres tantos como sea posible hasta el último .Char
  • ([^.]*) - Captura de grupo 1: cualquier 0+ caracteres que no sean un punto.

Vea la demostración de expresiones regulares y el gráfico Regulex:

introducir descripción de la imagen aquí

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=206780&siteId=1
Recomendado
Clasificación