Expresiones Regulares, para qué sirven y cómo utilizarlas

Expresiones Regulares para que sirven y cómo utilizarlas

Las expresiones regulares

En ocasiones precisamos hallar algo específico en un texto o bien cadena, o bien sustituir un texto por otro, así sea en una aplicación, o bien en un lenguaje de programación. Por poner un ejemplo si deseamos buscar “tag” y sustituirlo por “etiqueta” podemos emplear comando de buscar y sustituir. La mayor parte de aplicaciones o bien lenguajes tienen una función para efectuar estas acciones de manera sencilla. Más en ocasiones lo que deseamos hacer es más complejo, pues es posible que en lugar de ser una palabra o bien una parte de palabra simple, precisemos hacer algo como “búscame todas y cada una de las palabras que terminan en ’f’ y que comiencen por un número del dos al 71” o bien “reemplaza las palabras que contengan este conjunto de letras por esto”. En estos casos podemos usar las expresiones regulares (que acostumbran a llamarse “regex” o bien “regexp” de forma abreviada), que son como un lenguaje para poder acotar precisamente que deseamos buscar o bien sustituir. Conforme Wikipedia una expresión regular, de manera frecuente llamada asimismo patrón, es una expresión que describe un conjunto de cadenas sin contar sus elementos. Por poner un ejemplo, el conjunto formado por las cadenas Handel, H¨andel y Haendel se describe a través de el patrón H(a|¨a|ae)ndel.

Recomiendo probar esta herramienta para comprobar expresiones regulares, si encuentra coincidencia con tu cadena de texto

Ejemplos de Expresiones regulares

  • [abc123]        Representa uno de los caracteres situados entre los paréntesis.
  • [a-e]    Representa cualquiera de los caracteres que se encuentran entre el rango de: a y e, incluyendo tanto el primer carácter como el último.
  • [a-eh-x]           Del mismo modo que el anterior, representa cualquier carácter situado entre el rango de: a-e y h-x.
  • [^a-s]  Representa cualquier carácter que no se encuentre entre el rango de: a y s.

Algo de teoría

Puntos de anclaje

  • ^ Define el comienzo de la cadena de expresión regular. Coincidencia al principio de la línea.
  • $ Define el final de la cadena de expresión regular, en cadenas multilínea, encontrará la última ocurrencia. Coincidencia al final de la línea.

Caracteres

  • [] Se utiliza para definir una clase “carácter”.Se puede utilizar para que concuerde listados, o rangos.
  • Rango de caracteres, cuando se utilizan dentro de una clase de caracteres. Para los rangos, utilizaremos el carácter – como separador de definición, lo utilizaremos de la siguiente forma: [A-Z] concuerda cualquier letra mayúscula. Otros ejemplos válidos son: [0-9] [aeiou0-9]
  • ^ Se utiliza en conjunto con los corchetes [ ^ ] para definir una NEGACIÓN, es decir, concuerda cualquier carácter EXCEPTO los incluidos en el listado. [^a-f] encontrará cualquiera excepto a,b,c,d o f. Negación de la clase de caracteres.
  • Si queremos utilizar una concordancia más genérica, podemos utilizar las variables \d para dígitos, \w para espacios en blanco y \s para caracteres alfanuméricos. Las mismas variables en MAYÚSCULAS (\D) se utilizan para la negación, éstas deben ser utilizadas fuera de los corchetes [].
  • . (Punto) Coincidencia con cualquier carácter exceptuando el carácter de nueva línea \r y \n
  • *Busca cero o más de los caracteres que preceden a “*”. Por ejemplo, “Ab*c” encuentra “Ac”, “Abc”, “Abbc”, “Abbbc”, y así sucesivamente.
  • .* Esta combinación significa “lo que sea, una o más veces” (pero cuidado con esto que entra todo).
  • | Se utiliza para dar alternativas (o una concordancia o la otra), concuerda con una de las opciones separadas por este carácter. Puede usarlo como: abc|def|hij, en tal caso encontrará abc o def o hij. También puede usarlo como: abc(def|xyz) en este caso encontrará abcdef o abcxyz.

Caracteres no alfabéticos ni numéricos

Algunos de los caracteres “especiales” no numéricos ni alfabéticos tienen un significado de por si, como por ejemplo [ ] { } ( ) * . ^ $ etc. No podemos ponerlos tal cual si forman parte de nuestro formato, debemos “escaparnos” poniendo \ delante.

Agrupación

  • () Podemos utilizar estos caracteres para agrupar una combinación de los explicados anteriormente. Se utilizará con tres funciones básicas, la primera, organización visual de la expresión, también la utilizaremos para aplicar caracteres de cuantificación a un grupo de expresiones (Por ejemplo ABC([\w]{2,5}\.(html|xml))? ), también una función muy útil, es la de agrupar el resultado de una concordancia para poder utilizarla después como referencia.
  • $n donde n es un número del 1 al 9, se utiliza para referenciar a una agrupación previa realizará con (). El ejemplo anterior devuelve dos referencias, $1 y $2, la primera devuelve toda la parte de ([\w]{2,5}\.(html|xml)) y la segunda, únicamente (html|xml)
  • ? Se utiliza para anular una referencia. Si lo utilizamos justo después de abrir el paréntesis ( anulara la “back reference”, en ese caso si cambiamos la expresión anterior por: ABC([\w]{2,5}\.(?:html|xml))? veremos que sólo devuelve la referencia $1.

Cuantificadores

  • ? Coincidencia con el carácter, clase o sub patrón O ó 1 veces.
  • * Coincidencia con el carácter, clase o subpatrón O o ninguna vez.
  • *? Repite el elemento anterior cero o más veces. Al contrario que el anterior, devolverá la concordancia mínima. “.*?” encuentra “def” en abc “def” “ghi” jkl
  • + Coincidencia con el carácter, clase o sub patrón más de una vez.
  • {n} Coincidencia con el carácter, clase o subpatrón n veces.
  • {n,m} Coincidencia con el carácter, clase o sub patrón como mínimo n veces y, como máximo m veces.

Abreviatura

  • \d Abreviatura para la notación [0-9].
  • \D Abreviatura para la notación [0-9] (cualquier carácter que no sea un dígito).
  • \s Abreviatura para cualquier carácter de espacio en blanco.
  • \S Abreviatura para cualquier notación que coincida con cualquier carácter que no sea un espacio en blanco.
  • \w Abreviatura para la coincidencia con cualquier carácter de palabra.
  • \W Abreviatura para la coincidencia con cualquier carácter que no sea una palabra.