JavaRush /Blog Java /Random-ES /Vínculos de retroceso en expresiones regulares de Java
eGarmin
Nivel 41

Vínculos de retroceso en expresiones regulares de Java

Publicado en el grupo Random-ES
Las referencias inversas en las expresiones regulares de Java son una característica muy útil compatible con el motor Java . Para comprender qué son los vínculos de retroceso, primero debe aprender a comprender qué es un grupo . El grupo en expresiones regulares trata varios caracteres como una sola unidad. Los grupos se crean colocando caracteres entre paréntesis: “()”. Un par de paréntesis es un grupo. Los vínculos de retroceso son convenientes porque podemos repetir patrones de búsqueda sin copiarlos directamente. Sólo necesitamos hacer referencia a un grupo previamente definido usando una construcción como \N , donde N es el número del grupo. Los siguientes dos ejemplos le dan una idea de la conveniencia de los vínculos de retroceso.
Ejemplo 1: encontrar un patrón repetido
Una construcción de la forma (\d\d\d)\1 coincide con la línea 123123, pero no con la línea 123456. String str = "ля123123ля"; Pattern p = Pattern.compile("(\\d\\d\\d)\\1"); Matcher m = p.matcher(str); System.out.println(m.groupCount()); while (m.find()) { String word = m.group(); System.out.println(word + " " + m.start() + " " + m.end()); } Salida: ¡ 1 123123 2 8 Nota del traductor! Aquí, como traductor, quiero tomarme un poco de libertad e insertar comentarios míos, porque Yo mismo estoy aprendiendo sobre expresiones regulares y espero que me corrijan con malas palabras :) si lo que escribo a continuación es un error: 1) El método groupCount ( ) Devuelve el número de grupos especificados en el patrón, por lo que incluso si la cadena de entrada es "la123" 456 la", que no cabe en la plantilla, el número 1 aún se mostrará en la pantalla. 2) El método find() Busca el siguiente grupo, pero devuelve solo un valor booleano : verdadero – encontrado, falso – no encontrado 3) Método group() Devuelve la última subcadena encontrada en el patrón. En este caso 123123 4) El método start() Devuelve la posición de la subcadena encontrada en la cadena de origen (la numeración, por supuesto, comienza desde cero) 5) El método end() Devuelve la posición en la cadena de origen inmediatamente después de la encontrada subcadena. Por lo tanto, este valor no apunta al último carácter de la subcadena encontrada en la cadena de origen, sino al siguiente.
Ejemplo 2: encontrar palabras duplicadas
String pattern = "\\b(\\w+)\\b[\\w\\W]*\\b\\1\\b"; Pattern p = Pattern.compile(pattern, Pattern.CASE_INSENSITIVE); String phrase = "unique is not duplicate but unique, Duplicate is duplicate."; Matcher m = p.matcher(phrase); while (m.find()) { String val = m.group(); System.out.println("Найденная последовательность символов: \"" + val + "\""); System.out.println("Слово-дубликат: " + m.group(1) + "\n"); } Conclusión: Найденная последовательность символов: "unique is not duplicate but unique" Слово-дубликат: unique Найденная последовательность символов: "Duplicate is duplicate" Слово-дубликат: Duplicate tenga en cuenta que este método para encontrar palabras duplicadas (usando expresiones regulares) no es óptimo. Por ejemplo, en el ejemplo anterior, se omite la primera palabra "duplicar".
Comentarios
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION