Anuncios

Bienvenidos sean a este post, hoy continuaremos con expresiones regulares y sobre todos los metodos de las clases habladas en el post anterior, por este motivo comencemos con los metodos de la clase Matcher y para ello primero hablaremos de los metodos para generar los indices (index).

Anuncios

Estos metodos proveen valores de indices utiles que muestran donde fue encontrada la coincidencia en la cadena de entrada, aqui esta el listado:

  • public int start(), devuelve el indice inicial de la coincidencia previa.
  • public int start(int grupo), devuelve el indice inicial de una subsecuencia capturada por el grupo dado de una coincidencia previa.
  • public int end(), devuelve el ultimo lugar despues del ultimo caracter encontrado.
  • public int end(int grupo), devuelve el ultimo lugar despues del ultimo lugar de la subsecuencia capturada por el grupo dado durante la operacion de coincidencia previa.
Anuncios

Despues tenemos los metodos de estudio (study) los cuales devolveran un valor booleano indicando si existe una coincidencia o no del patron informado, veamos algunos de los metodos utilizados:

MetodoDescripcion
public boolean lookingAt()Intenta coinicidir la secuencia de entrada, comenzando por el prinicipio contra el patron
public boolean find()Intenta encontrar la proxima secuencia de entrada que coincide con nuestro patron
public boolean find(int start)Es igual al anterior pero lo hace desde le informemos
public boolean matches()Intenta encontrar la region entera que coincide con el patron
Anuncios

Otros metodos que disponemos son los de reemplazo, y son utilizados para reemplazar un texto en una cadena de entrada veamos una lista de metodos:

  • public Matcher appendReplacement(StringBuffer sb, String reemplazo), implementa un paso de reemplazo y agregado no terminal
  • public StringBuffer appendTail(StringBuffer sb), igual al anterior pero en este caso terminal
  • public String replacementAll(String reemplazo), reemplaza cada subsecuencia de la cadena de entrada que coinicida con la cadena informada
  • public String replaceFirst(String reemplazo), igual al anterior pero solamente reemplaza la primer coincidencia
  • public static String quoteReplacement(String s), devuelve una cadena de reemplazo de la cadena informada, este dato obtenido es utilizado para informarla en el metodo appendReplacement().
Anuncios

Antes de pasar a ver unos ejemplos, hablemos sobre los metodos de la clase PatternSyntaxException. Esta es una excepcion sin chequear que indica errores de sintaxis en un patron de expresion regular, veamos la siguiente lista de metodos disponibles de esta clase para una descripcion del error:

  • public String getDescription(), devuelve la descripcion del error
  • public int getIndex(), devuelve el indice de error
  • public String getPattern(), devuelve el patron de expresion regular erroneo
  • public String getMessage(), devuelve una cadenda multilinea con todos los datos de los metodos anteriores
Anuncios

Con todos los metodos explicados pasemos a ver algunos ejemplos practicos de algunos metodos antes descriptos:

Los metodos start y end
RegexCoinc.java

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class RegexCoinc
{
        private static final String REGEX = "\\bcat\\b";
        private static final String INPUT = "cat cat cat cattie cat";

        public static void main( String args[])
        {
                Pattern p = Pattern.compile(REGEX);
                Matcher m = p.matcher(INPUT);
                int count = 0;

                while(m.find())
                {
                        count++;
                        System.out.println("Match number " + count);
                        System.out.println("start(): " + m.start());
                        System.out.println("end(): " + m.end());
                }
        }
}
Anuncios

En este ejemplo primero tendremos una expresion regular (REGEX), luego el texto a analizar (INPUT), luego en el cuerpo de main() definiremos dos objetos, uno de Pattern llamado p y otro de Matcher llamado m, en el primero compilamos la expresion y en el segundo usamos a matcher sobre el texto, despues definiremos una variable llamada count y le asignaremos el valor de cero, luego hara un bucle en base al metodo find(), en el cual mostrara el numero de coincidencia, el comienzo y el fin, compilemos y ejecutemos para ver su salida:

tinchicus@dbn001vrt:~/programacion/java/program$ java RegexCoinc
Match number 1
start(): 0
end(): 3
Match number 2
start(): 4
end(): 7
Match number 3
start(): 8
end(): 11
Match number 4
start(): 19
end(): 22
tinchicus@dbn001vrt:~/programacion/java/program$
Anuncios

Los metodos replaceFirst y replaceAll
RegexCoinc.java

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class RegexCoinc
{
        private static String REGEX = "perro";
        private static String INPUT = "El perro dice miau. "
                                        + "Todos los perros dicen miau";
        private static String REPLACE = "gato";
        private static String TEMP;

        public static void main( String args[])
        {
                System.out.println(INPUT);

                Pattern p = Pattern.compile(REGEX);

                Matcher m = p.matcher(INPUT);
                TEMP = m.replaceFirst(REPLACE);
                INPUT = m.replaceAll(REPLACE);
                System.out.println(TEMP);
                System.out.println(INPUT);
        }
}
Anuncios

En este programa vamos a tener tres textos y uno vacio, en el primero va a ser el texto a buscar (REGEX), el segundo caso va a ser el texto de entrada (INPUT), el tercero va a ser el texto a reemplazar (REPLACE) y por ultimo uno vacio de estilo temporal (TEMP), luego en el cuerpo del main(), primero mostraremos el texto de entrada, despues compilaremos la expresion de busqueda, crearemos un objeto de tipo Matcher llamado m, donde usaremos el metodo matcher(), luego a TEMP por medio de m reemplazaremos la primer coincidencia de REGEX con REPLACE, luego modificaremos a INPUT reemplazando todas las expresiones regulares con el texto de REPLACE, en las ultimas dos lineas primero mostraremos el cambio en TEMP y luego el cambio de INPUT, si lo compilamos y ejecutamos obtendremos la siguiente salida:

tinchicus@dbn001vrt:~/programacion/java/program$ java RegexCoinc
El perro dice miau. Todos los perros dicen miau
El gato dice miau. Todos los perros dicen miau
El gato dice miau. Todos los gatos dicen miau
tinchicus@dbn001vrt:~/programacion/java/program$
Anuncios

Como pueden ver primero tenemos la variable INPUT sin modificacion, luego en TEMP (la segunda linea) se modifico unicamente la primera coincidencia y la ultima linea muestra el cambio de todas las coincidencias en INPUT.

Anuncios

En resumen, hoy hemos terminado de ver las expresiones regulares, hemos visto los metodos para obtener los indices, posiciones de una coincidencia, metodos para reemplazarlos de distintas formas, los metodos de estudio y por ultimo los metodos para poder ver un error en estos casos, espero les haya sido util sigueme en tumblr, Twitter o Facebook para recibir una notificacion cada vez que subo un nuevo post en este blog, nos vemos en el proximo post.

Anuncios

Tengo un Patreon donde podes acceder de manera exclusiva a material para este blog antes de ser publicado, sigue los pasos del link para saber como.

Tambien podes donar

Es para mantenimiento del sitio, gracias!

$1.00