;

Full width home advertisement

Tutoriales

Programación

Post Page Advertisement [Top]





Para este post me enfocare en dos paquetes particulares para el manejo de expresiones regulares: Pattern y Matcher.

Package Pattern

La clase java.util.regex.Pattern es la herramienta principal para el manejo de expresiones regulares en Java.

Los principales métodos  que se pueden usar con la clase Pattern son los siguiente:

  • Matches(String Patrón,String texto):  este método  busca dentro de una cadena caracteres un patrón indicado o definido por una expresión regular y retorna true si existe el patrón o falso si no se encuentra.    Se envían dos parámetros el primero es el patrón o expresión regular contenido en una variable de tipo String y luego el texto que va hacer evaluado.
  • Compile(String patron):  este método crea una instancia de la clase Pattern con el propósito de poder evaluar un patrón ó expresión regular infinita veces. 
  • Split(String texto): Despues de haber creado una instancia de Pattern puede utilizar el método Split que retorna  un vector de String  a partir de una cadena caracteres que se le envía por parámetros y esta cadena se divide según la expresión regular con la cual se instancio la clase Pattern.
Ejemplos:

package expresionesegulares2;

import java.util.regex.*;

public class Expresionesegulares2 {

    public static void main(String[] args) {
        String texto
                = "Este texto sera  usado para buscar "
                + "patrones dentro de la cadena";

        String patron = ".*buscar.*";

        boolean encuentro = Pattern.matches(patron, texto);

        System.out.println("matches = " + encuentro);

        String cadenapatron = ".*http://.*";

        //Uso de la funcion Compile()
        Pattern patronOBJ = Pattern.compile(cadenapatron);

        //Uso de a funcion matcher()
        Matcher matcher = patronOBJ.matcher(texto);
        encuentro = matcher.matches();

        System.out.println("matches = " + encuentro);

        //Uso de función Split()
        texto = "Es sep un texto sep con sep muchos sep Separadores";

        cadenapatron = "sep";
        patronOBJ = Pattern.compile(cadenapatron);

        String[] split = patronOBJ.split(texto);

        System.out.println("split.length = " + split.length);

        for (String element : split) {
            System.out.println("Elemento = " + element);
        }

    }

}


Package Matcher

La clase  java.util.regex.Matcher  tiene como función buscar expresiones regulares dentro de cadenas.  Con Matcher puedes buscar la misma expresión regular  en diferentes texto mas de una vez.     Para instanciar esta clase previamente se tiene que instanciar un objeto de tipo Pattern.

Esta clase tiene un conjunto de métodos que puede ser bastante útiles a la hora de trabajar con expresiones regulares los cuales son:


  • Matches(): este método  compara la expresión regular con toda la cadena, retorna true si la encuentra y retorna false sino la encuentra.
  • lookingAt(): En principio tiene la misma funcionalidad que el método Matches() pero con la salvedad que solo compara la expresión regular con el principio de la cadena  a ser evaluada.
  • Find():  este método busca la expresión regular dentro de la cadena  a ser evaluada pero este método cuando aparece múltiples veces la expresión regular siempre buscara la primera  y después por cada llamado a la función buscara la siguiente subcadena que sea igual a la expresión regular hasta no encontrar mas correspondencias.    Al unisono con este método se usan los métodos start() y end() que retornan respectivamente la posición inicial y final de la subcadena que se iguala con la expresión regular dentro de la cadena.
  • Group(): sencillamente extrae la subcadena con la que haya correspondencia con las expresiones regulares.   Con esta función también se puede traer para de la cadena que acompaña la subcadena que se compara con la expresión regular.
  • replaceAll() y replaceFirst():  son metodos para reemplazar las subcadenas que correspondan con la definición de la expresion regular.   ReplaceAll() reemplaza todas las correspondencias que puedan existir en la ccadena mientras replaceFirts() reemplaza solo la primera subcadena que encuentre.
  • appendReplacement() y appendTail():  este metodo tiene como proposito reemplazar subcadenas dentro una cadena de entrada para ser usado con un StringBuffer.
Ejemplo:

package expresionesegulares2;

import java.util.regex.*;

public class ExpresionesrgularesMatcher {

    public static void main(String[] args) {
        
  //Creando una instacnia de Matcher      
        String texto
                = "Este texto sera  usado para buscar "
                + "patrones con la cadena http://";

        String cadenapatron = ".*http://.*";

        Pattern patron = Pattern.compile(cadenapatron);

        Matcher matcher = patron.matcher(texto);
        boolean matches = matcher.matches();

//Usando la funcion lookingAt()
        System.out.println("lookingAt = " + matcher.lookingAt());
        System.out.println("matches   = " + matcher.matches());

//Usando la funcion find() + start() + end()
        int count = 0;
        while (matcher.find()) {
            count++;
            System.out.println("found: " + count + " : "
                    + matcher.start() + " - " + matcher.end());
        }

//Usando la funcion group()
        texto   = "Juan escribe sobre aquello, y Juan escribe de esto,"
                + "y Juan escribe de todo. ";

        String patternString1 = "(Juan)";

        patron = Pattern.compile(patternString1);
        matcher = patron.matcher(texto);

        while (matcher.find()) {
            System.out.println("Encontrado: " + matcher.group(1));
        }

        //Usando la funcion group para multiples grupos
        texto = "John writes about this, and John Doe writes about that,"
                + " and John Wayne writes about everything.";

        patternString1 = "(Juan) (.+?) ";

        patron = Pattern.compile(patternString1);
        matcher = patron.matcher(texto);

        while (matcher.find()) {
            System.out.println("found: " + matcher.group(1)
                    + " " + matcher.group(2));
        }

//Hallando grupo dentro de grupos
        texto = "Juan escribe sobre aquello, y Juan carlos escribe de esto,"
                + "y Juan escribe de todo. ";

        patternString1 = "((John) (.+?)) ";

        patron = Pattern.compile(patternString1);
        matcher = patron.matcher(texto);

        while (matcher.find()) {
            System.out.println("Encontrado: <" + matcher.group(1)
                    + "> <" + matcher.group(2)
                    + "> <" + matcher.group(3) + ">");
        }

        //Funciones replaceall() y replacefirst()
        texto  = "Juan escribe sobre aquello, y Juan carlos escribe de esto,"
                + "y Juan Diaz escribe de todo. ";


        patternString1 = "((John) (.+?)) ";

        patron = Pattern.compile(patternString1);
        matcher = patron.matcher(texto);

        String replaceAll = matcher.replaceAll("Juan Blocks ");
        System.out.println("replaceAll   = " + replaceAll);

        String replaceFirst = matcher.replaceFirst("Jose Blocks ");
        System.out.println("replaceFirst = " + replaceFirst);

        //funciones  appendReplacement()y appendTail()
        texto = "Juan escribe sobre aquello, y Juan carlos escribe de esto,"
                + "y Juan Diazz escribe de todo. ";

        patternString1 = "((Juan) (.+?)) ";
        patron = Pattern.compile(patternString1);
        matcher = patron.matcher(texto);
        StringBuffer stringBuffer = new StringBuffer();

        while (matcher.find()) {
            matcher.appendReplacement(stringBuffer, "Jose Blocks ");
            System.out.println(stringBuffer.toString());
        }
        matcher.appendTail(stringBuffer);

        System.out.println(stringBuffer.toString());
    }

}


Espero que le sea de utilidad saludos  y cualquier duda pregunten.
Parte I
Codigo Fuente






No hay comentarios:

Publicar un comentario

Bottom Ad [Post Page]

| Designed by Colorlib