Nov 192016
 
Artículo Java

Las expresiones regulares son una poderosa herramienta para el proceso de muchos tipos de datos.

En Java también es posible utilizar expresiones regulares, como se explica en este artículo.

Determinar si una cadena contiene un patrón especificado en forma de expresión regular

La funcionalidad para el tratamiento de expresiones regulares en Java está implementada en el paqueta java.util.regex.

Este paquete contiene las clases “Pattern” y “Matcher”.

Con la clase Pattern creamos un objeto correspondiente a un determinado patrón (expresión regular) que queremos utilizar en el programa. Por ejemplo:

Pattern p = Pattern.compile("a*b");

La clase Matcher implementa el método “matches()”, con el cual podemos comprobar si una determinada cadena de texto cumple con la expresión regular:

 Matcher m = p.matcher("aaaaab");
 boolean b = m.matches();

Por conveniencia, la clase Pattern también implementa un método estático “matches()”, que compila la expresión regular, crea una instancia de la clase Matcher, y llama a su método matches(). De este modo, las tres sentencias del ejemplo anterior se pueden escribir como una única sentencia:

boolean b = Pattern.matches("a*b", "aaaaab");

Sustituir con una subcadena las ocurrencias de un patrón en una cadena de texto

Para realizar la sustitución de la primera ocurrencia de la expresión regular, se utiliza el método replaceFirst() de la clase Matcher.

También podemos utilizar el método replaceAll() para sustituir todas las ocurrencias del patrón.

Ejemplo:

        Pattern p = Pattern.compile("(verde|rojo)");
        Matcher m = p.matcher("amarillo, rojo, morado, verde, naranja");
        String resultado = m.replaceFirst("azul");
        System.out.println("Colores: " + resultado);
        resultado = m.replaceAll("azul");
        System.out.println("Colores: " + resultado);

El código del ejemplo genera la siguiente salida:

Colores: amarillo, azul, morado, verde, naranja
Colores: amarillo, azul, morado, azul, naranja

Grupos de captura

La expresión regular puede contener grupos de captura encerrados entre paréntesis.

Después de aplicar el patrón (con el método “find()”) a una cadena de texto, el método group(n) permite recuperar las subcadenas coindicientes con cada uno de los grupos de captura presentes en la expresión regular. Por ejemplo:

        p = Pattern.compile("([^ ]*) ([^ ]*) (.*)");
        m = p.matcher("uno dos tres cuatro cinco");
        if (m.find()) {
            System.out.println("grupo A: " + m.group(1));
            System.out.println("grupo B: " + m.group(2));
            System.out.println("grupo C: " + m.group(3));
        }

En este ejemplo, la subcadena correspondiente al grupo $1 es “uno”, $2 es “dos” y $3 es “tres cuatro cinco”. El resultado que se presenta en pantalla es:

grupo A: uno
grupo B: dos
grupo C: tres cuatro cinco

Mediante la expresión “$n” (en donde n es el número de secuencia del grupo), las subcadenas correspondientes a los grupos de captura pueden ser utilizadas en el argumento de los métodos replaceFirst() y replaceAll(). Por ejemplo:

        p = Pattern.compile("([^ ]*) ([^ ]*) (.*)");
        m = p.matcher("uno dos tres cuatro cinco");
        resultado = m.replaceFirst("$3 - $2 - $1");
        System.out.println("Resultado: " + resultado);

Al ejecutar estass sentencias, el resultado que se presenta en pantalla es:

Resultado: tres cuatro cinco - dos - uno

Referencias

JavaDoc – java.util.regex.Pattern

Indice de artículos sobre programación en lenguaje Java

 Publicado por en 1:31 pm

 Deja un comentario

(requerido)

(requerido)