Realidad IT
11nov/090

Expresiones regulares para tontos

VN:F [1.9.22_1171]
Votos: +1

Las expresiones regulares son un misterio para la mayoría de los desarrolladores, cuando uno se encuentra con una en medio del código, no importa el lenguaje de programación que se use, uno suele quedarse con los ojos abiertos de par en par como diciendo WTF*. Yo en lo que va de mi historia como programador detecté algunos usos comunes de estos jeroglíficos:

  1. Para filtrar una string (el uso mas viejo)
  2. Para validar un campo de un formulario (muy usado en ajax)
  3. Para parsear** páginas web completa con un webspyder (muy usado hoy en día por las famosas páginas que trajo la web 2.0 que hacen minería de datos por las diferentes páginas de la web para juntar toda la información en una sóla página casos famosos confronte.com, buscape.com, entre otros ).

He pasado por eso varias veces, y por esto quisiera aliviarles el trabajo de entender una expresión regular compleja, y lo voy a hacer con un breve pero efectivo ejemplo. Esto es una expresion regular:

//Expresion regular de ejemplo
(<a href=\"http:\/\/m\.facebook\.com\/.*?>([^<]+)<\/a>(.*?))<small>&nbsp;-&nbsp;(.*?)<\/small>.*?id=(\d+)&amp;story_fbid=(\d+).*?<a href=\"(.*?)>

Vieron, yo les dije que se iban a quedar con la boca abierta. En fin, esta regular expresion aunque no lo crean parsea la siguiente página de Facebook: http://m.facebook.com/stories.php?raf2da235&tab=3&refid=7 y obtiene los siguientes datos:

  • URL
  • Nombre de usuario
  • Mensaje del usuario (de tipo status)
  • Fecha de inserción
  • Id de usuario
  • Id de mensaje
  • URL para postear un "me gusta"

Bueno, la solución es conseguir un software que nos ayude a comprende (y hasta a armar) expresiones regulares sin tener que conocer a fondo la sintaxis. En mi caso voy a destacar RegexBuddy, una excelente herramienta. En las capturas pueden ver como muestra los resultados de nuestra expresión regular y como identifica cada comando dentro de la expresión regular. RegexBuddy En esta primera captura pueden ver como se extrae toda la información que mencioné antes. En la ventana que dice "Test" lo único que hice fue pegar el código fuente de la página que estoy queriendo parsear. Esta expresión regular escrita en PHP (basada en PERL) extrae todos los datos que se encuentran entre paréntesis, en la captura pueden ver como estan resaltados los paréntesis en verde. RegexBuddy2 Otra funcionalidad muy potente de la herramienta es el analizador de tokens que figura en la opción "Create" y que identifica y explica el significado de cada carácter. La opción "Library" que no figura en las capturas trae una biblioteca de expresiones regulares comunes, entre ellas, como detectar un email, como detectar una fecha en un formato determinado, como detectar un nro de documento, tarjeta de crédito, código postal, tag de html, etc. Mi conclusión es, pierdanle el miedo de una vez a las expresiones regulares, son muy potentes y no son tan complejas como parecen a simple vista.
*What the fuck?
**Parsear: De inglés Parser, se traduce como analizador sintáctico, pieza de software que puede detectar y extraer información dentro de documentos de texto.