Viñeta de expresiones regulares (xkcd traducida)
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
rede la biblioteca estándar); el comentario muestra su salida real. - Se han quitado las imágenes copiadas de xkcd; se enlazan las originales.