14 de abril de 2008

Expresiones Regulares


Hace ya varios días que vengo realizando ciertas tareas en mi trabajo que me han hecho decir más de una vez "Que suerte que se inventaron las expresiones regulares".

La tarea se trataba, a grandes rasgos, de filtrar cadenas de caracteres que recibía desde un sistema y de acuerdo a ciertos parámetros, devolver un valor numérico... nada del otro mundo, sólo que éstas cadenas de caracteres no siempre eran iguales, sino que seguían ciertos patrones... razón de ser de las expresiones regulares.

Era una tarea que pude haber hecho con un conglomerado de if's o cases, pero utilizando las RegEx todo eso se redujo a 2 lineas de código por cada caso a filtrar y si bien eran bastante simples, creo que fue una buena manera de ver cómo te pueden salvar el día y a la vez ver que no hay que tenerles miedo, mucha gente piensa que son un monstruo indomable.

En mi caso no utilicé nada complejo, y dejo una pequeña referencia que para empezar es más que suficiente.

  • ^ - Comienzo de la cadena

  • $ - Fin de la cadena

  • [tk7] - Cualquiera de los caracteres t, k ó 7

  • [^tk7] - Cualquier caracter excepto t, k ó 7

  • [0-9] - Caracteres numéricos comprendidos entre 0 y 9

  • \ - Caracter de escape, se utiliza en conjunto para indicar un caracter especial como parte de la expresión. Por ejemplo \. significa que se busca el caracter . (punto).

  • . - Cualquier caracter, una sola ocurrencia

  • + - Una o más ocurrencias del caracter que le precede

  • ? - Cero o más ocurrencias del caracter que le precede


En wikipedia hay un buen artículo introductorio y recomiendo las herramientas RegEx Pal y RegExr para ir probando sus propias expresiones.

Un ejemplo simple sería una dirección de email:

^((\w|\.){2,}@)\w{3,}\.\w{2,3}((\.(\w{2}))?)?$

La expresión regular anterior presenta una forma muy simple de validar direcciones de email, aunque no es la más completa, permite validar una dirección sin entrar en detalles, permitiendo validar direcciones compuestas de
(3 o más caracteres alfanuméricos ó puntos)@(3 omás caracteres alfanuméricos).(2 o 3 caracteres alfanuméricos)(cero o una ocurrencia de (.(2 caracteres alfanuméricos)))


Yo no soy ningún experto en este campo, pero reconozco el poder que tienen y es uno de los temas que me gustaría dominar.

No hay comentarios.: