Expresiones regulares. Introducción.

Expresiones regulares, regular expressions o simplemente regex. Como casi todo en .NET, no se trata de un concepto exclusivo del framework de Microsoft (ni mucho menos), pero éste nos ofrece unas herramientas de trabajo muy potentes y que nos hacen la vida muy fácil.

Esta artículo consta de dos partes. En la primera se dará una pequeña introducción de lo que son las expresiones regulares, así como algunos ejemplos y referencias a tutoriales completos y programas, y en la segunda parte se hará más enfasis en cómo con ASP.NET se puede trabajar de forma muy sencilla, elegante y eficaz con las expresiones regulares.

¿Qué son las expresiones regulares?

Las expresiones regulares son una de esas cosas que tardarías diez minutos en explicar cuando bastaba un simple ejemplo para aprender. La idea es que queremos encontrar "cierto patrón" dentro de un texto.

A continuación tenéis algunos ejemplos, desde los muy simples hasta los más complejos. Dentro de un texto dado, queremos encontrar cosas como...
- ... todas las referencias a la palabra "programación".
- ... todas las palabras que empiecen por 'Val'.
- ... todas las palabras que acaben por 'ar', 'er' o 'ir' para identificar los verbos regulares
- ... las palabras que contengan la letra 'q' y cuya longitud sea menor de 10 caracteres.
- ... las palabras que empiezan por 'pre', pero no quiero que 'pre' entre dentro del valor de referencia devuelto. Por ejemplo, encontraríamos la palabra 'previsión', pero se nos devolvería la palabra 'visión'.

Algunos ejemplos...
No es objetivo de este artículo el explicar el formato de esos patrones que van a definir nuestra búsqueda (eso vendrá en un futuro artículo), sino el explicar cómo ASP.NET trabaja con los resultados de la búsqueda.

Pero para que nos entendamos un poco mejor, a continuación muestro algunos ejemplos de patrones:

1. programa. Este es el patrón más sencillo de todos, pues simplemente nos devuelve todas las referencias al conjunto de caracteres seguidos p r o g r a m a, por tanto, nos devolverá todas las palabras 'programa', pero también devolverá 'programación' o 'programando'.

2. \bprogramación\b
. Dado que es posible/probable que no nos interese la palabra programando, sino la palabra programa, podemos usar '\b', que es un código especial que delimita el inicio o el final de una palabra (según donde se coloque).

3. \b\w+\b.
Esta expresión recoge cualquier palabra entera, donde '\w' representa a caracteres alfanuméricos y '+' indica "una o más repeticiones".

4. \bprograma\b.*\btarde\b
. Ahora queremos encontrar una serie de palabras empezando por programa y terminando por tarde, haya lo que haya entre la palabra programa y la palabra frase. Por ejemplo, nos devolvería 'programa hasta muy tarde'. El caracter especial '.' se refiere a "cualquier caracter", y el caracter especial '*' se refiere a 0 o más repeticiones. Es interesante observar que en este caso '*' nunca serán 0 caracteres porque tanto a programa como a tarde les imponemos que sean palabras enteras (y no lo serían si no tuvieran espacio entre ellas).

5. (?<=<u>).{1,20}(?=</u>)
. Ahora cogemos todo lo que vaya subrayado y que tenga menos de 20 caracteres, pero sin coger los tags que indican el subrayado. Es decir, en el texto "Estoy en <u>subrayado</u>", se encontraría "<u>subrayado</u>", pero se devolvería únicamente "subrayado". (?<=miexpresion) indica que se buscan coincidencias con ese prefijo, pero que no se devuelve ese prefijo, y análogamente (?=miexpresion) para el sufijo. {1,20} indica entre 1 y 20 repeticiones de la expresión anterior.

6. (?<=<\s*u\s*>).{1,20}(?=<\s*/\s*u\s*>)
. Upload/expresso.jpgAlgo más complejito, y sólo a título lectivo, ahora devuelve lo mismo de antes, pero permitiendo que los tags tengan espacios intermedios (algunas editores de HTML dan ese error). Es decir, tal y como sucede antes, devolvería "subrayado" dentro de "Estoy en <   u    >subrayado<  /    u>"

Repito que no es objetivo de este artículo la explicación de cómo se forman las expresiones regulares. Podríamos seguir con 3000 ejemplos, pero para hacernos a una idea de lo que queremos, no está mal la cosa, ¿no?

Para los que queráis hacer más hincapié, deciros que de todos los tutoriales sobre expresiones regulares que he leído, el que más me ha aclarado las ideas ha sido "The 30 minutes regex tutorial". Además hace referencia a un programa llamado Expresso... sinceramente es el único que he pobado, pero no creo que pruebe ninguno más porque éste nos da todo lo que hace falta. Desde el análisis paso por paso del patrón de expresión regular que queremos tratar, hasta los resultados de ese patrón en el texto que le especifiquemos, pasando un montón de ejemplos y mucho más.

También es interesante esta librería de expresiones regulares, donde se puede encontrar prácticamente de todo, aunque destacan sobretodo las expresiones regulares complejas, por lo que sólo es aconsejable cuando se ha cogido algo de práctica (sino, uno puede hasta deprimirse).

Finalmente, echadle un vistazo a un tutorial de expresiones regulares algo más técnico.

En la parte II, se hablará sobre cómo ASP.NET trabajo con las expresiones regulares.