Extraer subcadenas con expresiones regulares

En Java más o menos todos conocemos las expresiones regulares. Con ellas podemos comprobar si una cadena de caracteres cumple un determinado patrón. Por ejemplo, para ver si una cadena corresponde a una fecha "dd/mm/yy", podemos usar la expresión regular "\\d{1,2}/\\d{1,2}/\\d{1,2}". Luego, la clase Pattern nos dice si la cadena cumple o no con el patrón. Por ejemplo

Pattern.matches("\\d{1,2}/\\d{1,2}/\\d{1,2}", "11/22/33") // devuelve true
Pattern.matches("\\d{1,2}/\\d{1,2}/\\d{1,2}", "a/22/cc") // devuelve false

Lo que quizás es menos conocido, es que podemos "extraer" de las cadenas que estamos verificando aquellas partes que nos interesen. Por ejemplo, una vez verificado que la cadena es una fecha, podemos querer extraer el día, el mes y el año.

Con expresiones regulares podemos hacer esta tarea algo más sencilla, sin necesidad de andar buscando indices y extrayendo subcadenas.

El "truco" consiste en meter entre paréntesis en la expresión regular aquellos trozos en los que tenemos interés. Por ejemplo, para nuestra fecha, podemos poner la expresión regular así "(\\d{1,2})/(\\d{1,2})/(\\d{1,2})". Luego, el siguiente código nos da fácilmente las tres subcadenas correspondientes a los números

// Obtenemos un Pattern con la expresión regular, y de él
// un Matcher, para extraer los trozos de interés.
Pattern patron = Pattern.compile("(\\d{1,2})/(\\d{1,2})/(\\d{1,2})");
Matcher matcher = patron.matcher("11/22/33");

// Hace que Matcher busque los trozos.
matcher.find();

// Vamos obteniendo los trozos. El primer paréntesis es el 1,
// el segundo el 2 y el tercero el 3
System.out.println(matcher.group(1));
System.out.println(matcher.group(2));
System.out.println(matcher.group(3));

// La salida de este programa es
// 11
// 22
// 33

 

Esta entrada fue publicada en java. Guarda el enlace permanente.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.