Introducción a expresiones regulares

5/5 - (1 voto)

En este articulo nos vamos a centrar en sacarle el máximo partido a las expresiones regulares, las cuales son unas de las grandes olvidadas, ya que no se usan mucho pero nos pueden ayudar a encontrar, filtrar textos y encontrar coincidencias de forma rápida con la que ahorraremos tiempo y podremos validar, sustituir, remplazar o dividir contenidos. Empezamos.

¿Qué son las expresiones regulares?

Una expresión regular es, según su propia definición, patrones que nos permiten buscar coincidencias para validar, sustituir, remplazar o dividir contenidos. El problema es que no son intuitivas a simple vista, pero para muchos programadores son la solución para poder encontrar los datos buscados.

Como ejemplo podemos tener esta expresión regular:

^[_a-z0-9-]+(.[_a-z0-9-]+)*@[a-z0-9-]+(.[a-z0-9-]+)*(.[a-z]{2,4})$

Sintaxis

Ya sabemos qué es una expresión regular  pero antes de seguir, lo primero que vamos a explicar, es qué significa cada uno de los caracteres, ya que según su posición, o la posición de otros caracteres, estos toman unos u otros significados. Para ello es necesario conocer la sintaxis de cada uno de los caracteres los cuales vamos a ir explicando uno por uno.

 

Metacaracter ^

En este caso, el objetivo de este carácter es indicar que se quiere buscar algo que esté al principio de la cadena de texto que estemos buscando o al principio de la línea. Sería equivalente a decir, “queremos que empiece por…”

Ejemplo: 

/^abc/

xxieo asdfa abc oasidfjasdf

abc afosdifjoasf asdifjoa

abcdeefjelsadfaf

 

En la primera línea, aunque existe el conjunto “abc”, no sería válido, ya que no corresponde a inicio de línea. Sin embargo las otras 2, sí, y por tanto la expresión regular, marcaría solo esos dos resultados.

 

Metacaracter $

En este caso, el objetivo es el inverso al anterior. Se busca que el patrón coincida con el final de una línea o con el final de la cadena. Sería útil para filtrar dominios en un listado de emails.

Ejemplo:

/abc$/

xxieo asdfa abc oasidfjasdf

abc afosdifjoasf asdifjoa

abcdeefjelsadfaf asbababc

También podemos usar, ambos a la vez, para conseguir que una cadena o una de las líneas, empiecen y acaben por lo que definamos.

 

Metacaracter *

Para indicar que en una parte del texto, haya 0 caracteres o más, podemos usar este carácter. De esta forma, /aa*aa/ por ejemplo, podría ser desde “aaaa” a cualquier combinación con cualquier otro carácter “aa(tantas a como sean posibles)aa”

 

Metacaracter +

Este carácter, sirve para lo mismo que el anterior, pero al menos, tiene que haber un carácter por lo menos, o más. Esa es la diferencia.

 

Metacaracter ?

Otro carácter similar a los anteriores, pero este no indica más de 1. Sólo, busca que haya un carácter o ninguno.

 

Metacaracter {2}

En este caso lo que se busca es que sean “2 caracteres”, y solamente 2. Cualquier otro número, también se puede utilizar.

Este, también permite combinaciones, como {3, } donde indica, 3 o más. Y también se pueden poner rangos, como por ejemplo, {3,5} 

 

Hasta aquí, estamos definiendo repeticiones de algo. Ahora vamos a ver, como definir lo que se tiene que repetir.

Metacaracter .

Un punto, es el máximo comodín. Es decir, indica que puede ser cualquier caracter, con la excepción de una nueva línea. Combinado con los metacaracteres anteriores, podemos indicar por ejemplo que queremos un repetición concreta de caracteres.

 

Metacaracteres ( )

Los parentésis, sirven para definir grupos de la cadena de texto que queremos luego obtener. Por ejemplo en PHP, las funciones que hacen uso de expresiones regulares, devuelven un array con los resultados obtenidos dentro de los paréntesis.

 

Metacaracteres [ ]

Los corchetes, sirven para definir rangos. Por ejemplo, si queremos que la coincidencia sea de algunas letras, podemos poner [abc], por tanto, tienen que existir alguna de estas letras

 

Otra posibilidad es usar el “-”, para definir rangos más grandes. Por ejemplo, si queremos que las letras del rango sean todas las letras minúsculas, podemos usar lo siguiente [a-z]. ¿Queremos también añadir las mayusculas? podemos usar entonces lo siguiente [a-zA-Z]

 

Metacaracter |

Al igual que algunos lenguajes de programación, significa o una u otra. Por ejemplo, podemos poner (a | b) y esto significa que sea o una a o un b

 

Metacaracter ^ (dentro de corchetes)

Nuevamente, tenemos este metacaracter, pero atención, en este caso no significa lo mismo que en el primer punto que hemos visto. Cuando se usa de la siguiente manera, [^a] significa que la concordancia puede ser cualquier carácter excepto la letra “a”

Hasta aquí hemos detallado unos cuantos metacaracteres, pero hay más, os dejamos la siguiente imagen para que los tengáis todos.

expresiones regulares

Os podéis bajar este link, en formato pdf https://cheatography.com/davechild/cheat-sheets/regular-expressions/pdf/

Herramienta online

Y antes de seguir con los ejemplos, os pasamos un link a una web muy completa, donde podréis probar y comprobar vuestros conocimientos en expresiones regulares.

https://regexr.com/

imagen de la web regexr.com

En esta página, en la parte derecha, podréis ver arriba, un hueco para definir una expresión regular.

Debajo de este hueco, hay un texto, que podéis modificar. Por tanto podréis comprobar si se marcan las coincidencias que esperáis o no.

Y por último, y casi tan importante como todo lo demás, hay una explicación del formato de la expresión regular, donde caracter a caracter te va explicando qué significa cada cosa utilizada en la expresión regular.

Ejemplos

¿Cómo determinar que una cadena de texto es un teléfono válido?

Además de “buscar” o “modificar” partes del texto ayudados por una expresión, también podemos usar las expresiones regulares para “validar” una cadena de texto.

Por ejemplo: (\+34|0034|34)?[ -]*(6|7)[ -]*([0-9][ -]*){8}

Esta expresión regular, nos ayuda a validar un teléfono. Útil en aquellos formularios donde queremos que el teléfono que nos pasen sea correcto.

ejemplo expresión regular para teléfonos

Utilizando la web regexr, podemos probarlo, y comprobar que efectivamente, la expresión cumple perfectamente con su cometido.

¿Cómo validar un código de color web en formato hexadecimal?

Para este caso, podemos usar la siguiente expresión regular:
#([\dA-Fa-f]{3}){1,2}

Veamos un ejemplo con la web ya usada antes.

Ejemplo expresión regular para códigos css hexadecimales

Y nuevamente, vemos como sólo marca los valores válidos.

¿Cómo podemos obtener del código HTML de una web, las imágenes?

Pues podemos usar la siguiente expresión
< *[img][^>]*[src] *= *[«‘]{0,1}([^»‘ >]*)

Ejemplo expresión regular para obtener las Url de imagenes sobre el html de una web

Bien, aquí hay que explicar, un concepto que hemos comentado antes, pero que no está de más recordarlo.

Como podéis ver, hay paréntesis en la expresión regular.

Por tanto, está marcando la expresión, toda la etiqueta IMG, pero además, el paréntesis nos está marcando sólo la URL de la imagen. Por tanto, en cualquier lenguaje de programación, usando esta expresión regular, nos devolvería un array con todo lo que coincide y además, la URL en otra entrada del array, por lo que podríamos guardarla o procesarla.

Por último, os animamos que exploréis esta web y probéis vuestras propias expresiones regulares.

Con todo estos conocimientos podréis, 

  • redireccionar URLs en vuestros servidores, usando .htaccess.
  • realizar scraping de contenido web para obtener urls u otros valores de una web
  • podréis validar cualquier formulario, desde emails, teléfonos, cuentas bancarias, pasaportes…
  • y un largo etc…

 

Comparte
¿Quieres más información?
Ponte en contacto con nosotros.
Picture of Jorge Tejedor
Jorge Tejedor

Enviar Comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

Suscríbete a nuestra newsletter
para estar al día en el mundo online
¿Tienes alguna incidencia?

Cuéntanos qué ocurre
y nos pondremos con ello lo antes posible.

    Este sitio está protegido por reCAPTCHA, y la Política de privacidad y Términos de servicio de Google.

    ¡Cuéntanos tus ideas!
    +34 96 653 19 14
    info@acceseo.com

      Este sitio está protegido por reCAPTCHA, y la Política de privacidad y Términos de servicio de Google.