[Métodos] Expresión Regular


RegEx


RegEx ('Regular Expression' en inglés) según la Wikipedia es una secuencia de caracteres que forma un patrón de búsqueda, principalmente utilizada para la búsqueda de patrones de cadenas de caracteres u operaciones de sustituciones.

Ademas pone un lindo ejemplo:


l grupo formado por las cadenas Handel, Händel y Haendel se describe con el patrón "H(a|ä|ae)ndel"

La verdad yo no entendi mucho, y agrega:


n informática, las expresiones regulares proveen una manera muy flexible de buscar o reconocer cadenas de texto.




Básicamente podemos decir que una expresión regular es un codigo raro como:

  ([a-zA-Z]\w*?)

Pero nos permite a través de esos caracteres con operadores, palabras, o secuencia de caracteres que deseamos encontrar si no conocemos bien con exactitud lo que estamos buscando dentro de una cadena de texto.

En java usamos las clases del paquete java.util.regex:




Una manera de invocar expresiones regulares es:

  String cadena = "aaaaab";
  Pattern p = Pattern.compile("a*b");
  Matcher m = p.matcher(cadena);
  boolean b = m.matches();

El booleano deberia devolver true ya que buscamos:

  • a* que contega la letra 'a' un número indeterminado de veces con el operador '*'
  • b seguido de una letra 'b'
Dicha expresión regular se encuentra dentro de la cadena de texto que buscamos y por lo tanto la condicion termina siendo verdadera.
Otra manera de invocar una expresión regular en una sola línea es:

  boolean b = Pattern.matches(String regex, CharSequence input);

De la misma manera que lo hace la clase String :
  public boolean matches(String arg0) {
         return Pattern.matches(arg0, this);
  }

Pasando como parámetros la expresión regular como un String y nuestro texto como una clase que implemente la interfaz CharSequence, las cuales son:



Resumen de las construcciones de expresiones regulares


Patrón Igualación a Descripción
x el caracter x Una letra cualquiera se iguala a la misma.
[abc] letra a ó b ó c cual quier palabra que contenga alguna de las letras dentro del corchete.
[^abc] cualquier caracter excepto la 'a' 'b' 'c' el operador ^ es de negación, aunque la palabra contenga la 'a', matcheara con las otras letras.
[a-zA-Z] cualquier letra desde la 'a' hasta la 'z' rango de valores desde la primera letra a la segunda en minúsculas y mayúsculas.
[a-d[m-p]] cualquier letra desde la 'a' hasta la 'd' y también desde la 'm' a la 'p' unión de rangos de valores distintos.
[a-z&&[def]] cualquier letra desde la 'a' hasta la 'z' que sean iguales a 'd','e' y 'f' intersección de rangos de letras.
[a-z&&[^bc]] cualquier letra desde la 'a' hasta la 'z' excepto las letras 'b' y 'c' Substracción de rango de letras.
[a-z&&[^m-p]] cualquier letra de la 'a' a la 'z' excepto el rango de de 'm' a 'p' idem anterior pero con un rango de letras.
. Cualquier caracter (no solo letras) _Comodin para todos los caracteres.
\d un digito de 0 a 9 rango numerico decimal.
\D un no digito de 0 a 9 (letras y caracteres) negación de un rango númerico de 0 a 9.
\s un espacio en blanco similar a los tipos: [ \t\n\x0B\f\r]
\S un NO espacio en blanco la mayúscula es negación.
\w similar a [a-zA-Z_0-9] un caracter alfanúmerico
\W un NO caracter alfanúmerico negacion de [^/w]
^ El principio de una linea operador que indica agrega información al patrón
$ final de la línea operador que indica agrega información al patrón
\b limite de una palabra operador que indica agrega información al patrón
\B un NO limite de una palabra operador que indica agrega información al patrón
\A el principio de un input operador que indica agrega información al patrón
\G el final del macheo anterior operador que indica agrega información al patrón
\Z el final de una linea (\n \r\n \r \u0085 \u2028 \u2029) operador que indica agrega información al patrón
\z el final de un input operador que indica agrega información al patrón
X? X, al menos una vez o ninguna vez ? cuantificar una o ninguna
X* x cero veces o más * cuantificador cero o más
X+ X al menos una vez o más veces + cuantificador una o más
X{n} X 'n' veces exactamente el número de n veces
X{n,} X al menos el número de n veces cuantificador n veces o más
X{n,m} X n veces y no mas de m veces cuantificador de rango entre n y m veces (n<m)




Ya una vez empezando a entender como funcionan los patrones, solo queda jugar con los métodos de la clase Matcher


 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
public boolean expReg(String patron, String texto){
    Pattern p = Pattern.compile(patron);
    Matcher m = p.matcher(texto);
    return m.matches();
}

public static String expReg(String patron, String texto){
    Pattern p = Pattern.compile(patron);
    Matcher m = p.matcher(texto);
    if(m.matches())
    return m.replaceAll("EEE");
    else
    return "El patrón no se encontraba en el texto";
}






ReGex Java Online


Otra manera de aprender y encontrar patrones de expresión regular es con los regex online para java.

Entre muchos otros, y solo online sino tambien como plugins de IDEs o version desktop, pero por ejemplo:



Regexe

No hay comentarios:

Publicar un comentario