Nivel inicial3 min de lectura · Publicado el

Viñeta de expresiones regulares (xkcd traducida)

Expresiones regulares: un patrón saca de una pila de cartas las que tienen forma de correo, ana@example.com y soporte@empresa.es, y deja @nadie. Regex: la forma, no el textorubentejera.com @nadieregex[email protected][email protected]tienen forma de correo
Como pedir «todas las cartas con sello extranjero» sin decir cuáles: la regex describe la forma, no el contenido. Saca [email protected] y [email protected] y deja @nadie, como en el ejemplo en Python del artículo.

Una expresión regular (regex) es un patrón que describe la forma de un texto: «letras, una arroba, más letras, un punto…». Es como pedirle a alguien que busque en una pila de cartas «todas las que lleven sello extranjero» sin decirle cuáles son: le das la forma, no el contenido.

Viñeta 1: «Sé expresiones regulares»

Viñeta original: xkcd 208, «Regular Expressions».

  • Cada vez que aprendo una nueva habilidad, invento complejos escenarios de fantasía donde me permite salvar el día.
  • ¡Oh, no! ¡El asesino debe de haberla seguido de vacaciones!
  • ¡Pero para encontrarlo tendríamos que buscar en 200 MB de correos electrónicos algo con formato de dirección! ¡Es inútil!
  • Todo el mundo atrás.
  • Yo sé expresiones regulares.

El héroe entra colgado de una cuerda, teclea en el ordenador (el sonido es «¡PERL!», un lenguaje muy asociado a las regex) y sale volando entre vítores.

Viñeta 2: «Ahora tengo 100 problemas»

Viñeta original: xkcd 1171, «Perl Problems».

  • Si tienes problemas con Perl, lo siento por ti, hijo.
  • Yo tengo 99 problemas,
  • así que usé expresiones regulares.
  • Ahora tengo 100 problemas.

El chiste mezcla una canción de rap («99 Problems») con un dicho clásico entre programadores: cuando resuelves un problema con una expresión regular, a menudo te llevas uno nuevo, la propia expresión regular, difícil de leer y de mantener.

Una regex resuelve el problema… y a veces se convierte en el siguiente.

El ejemplo de la viñeta, de verdad

Buscar «algo con formato de dirección» en un texto es un caso real. En Python:

import re

texto = "Escríbeme a [email protected] o a [email protected], no a @nadie."
print(re.findall(r"[\w.+-]+@[\w-]+(?:\.[\w-]+)+", texto))
# ['[email protected]', '[email protected]']

El patrón se lee así: uno o más caracteres de nombre, una @, un dominio y al menos un .algo. Sirve para encontrar direcciones en un texto, pero no para validarlas al cien por cien: el formato completo de una dirección de correo es mucho más enrevesado. Ahí tienes el problema número 100.

Si quieres aprenderlas en serio, sigue con Expresiones regulares en Ruby y prueba tus patrones con las herramientas de Utilidades para expresiones regulares.

Fuentes

  • Viñetas originales y sus transcripciones: xkcd 208 (10 de enero de 2007) y xkcd 1171 (8 de febrero de 2013), de Randall Munroe, con licencia CC BY-NC 2.5. La traducción es nuestra.
  • El ejemplo se ha ejecutado con Python 3.14.4 (módulo re de la biblioteca estándar); el comentario muestra su salida real.
  • Se han quitado las imágenes copiadas de xkcd; se enlazan las originales.