29 abril 2008

Maestreando expresiones regulares

A veces que me doy cuenta de porque hay gente que me llama friki. Sólo el hecho de haber estudiado teleco y trabajar en désedos ya es bastante friki. Y aunque yo me considero bastante normal (¿quién no?) tengo que reconocer algunas cosas que me delatan, como el libro que os presento.

Pues resulta que como la semana pasada tenía tiempo libre en el trabajo y en désedos hay una biblioteca bastante generosa, he empezado a leerme un libro que estoy seguro que el 80% o más de los que leéis el blog no vais a entender ni de qué va. Ni aun cuando os lo cuente. (Y pobres los del 20% que sí lo hagan.)

El libro en cuestión se llama Mastering Regular Expressions.


Las preguntas inmediatas son:
- ¿Qué leches es eso de Regular Expressions?
- ¿Para qué sirve eso?

Siento avanzar que no tengo respuesta satisfactoria para ninguna de estas dos preguntas.

Aun así vamos a intentarlo.

Las expresiones regulares son... esto... unas cosas... es... como un toro!

Veamos un ejemplo a ver si así es más fácil empezar a coger la idea:
Cuando en el Windows buscas archivos .bmp, pones en el buscador que busque archivos llamados *.bmp, queriendo decir que * puede ser cualquier cosa. Esto no es una expresion regular, pero la idea se acerca.


Las expresiones regulares se usan en muchos lenguajes de programación para buscar patrones en variables o archivos de texto. Se parece a la utilidad de los editores de texto de buscar palabras, sólo que lo que buscamos no son palabras concretas, sino trozos de texto que cumplan con una serie de fórmulas que queremos.

Y como se desprende de lo dicho, las expresiones regulares sirven, entre otras cosas, para buscar cadenas de caracteres concretas en ficheros y para comprobar si una variable tipo texto cumple (es igual o parecida) unas determinadas características.

¿Ni idea?
Veamos un par de ejemplos que yo mismo uso. Uno es más o menos fácil de ver y el otro nos puede sonar a chino si no sabemos de qué va esto de las expresiones regulares.


- En mi trabajo, todos los días por la mañana analizamos los resultados de los tests que se han pasado a la versión diaria del software que hacemos. Estos resultados son archivos de texto (algunos de varios megas) que contienen la salida de los distintos subtests.
Aunque cada archivo tiene un informe al final, yo sólo tengo que escribir un comando para ver en pantalla los subtests que han fallado en todos y cada uno de los archivos sin tener que abrir uno por uno los ficheros. Para ello escribo en la consola:
egrep 'SubTest.+FAILED!' *version_20080421*
donde egrep es el comando de Linux que busca un patrón en un archivo, *version_20080421* es el conjunto de todos los archivos que contienen la versión que me interesa y SubTest.+FAILED! es la expresión regular que sólo me localiza las líneas que contienen al mimo tiempo la palabra SubTest y la palabra FAILED!. Así puedo ver, en unos segundos, qué cosas han fallado y me ahorro tener que abrir y analizar los ficheros donde todo ha ido bien.

- Tengo que comprobar que el contenido de una variable es un email válido (no que exista, simplemente que siga la fórmula nombre@servidor.dominio). Con hacer la siguiente comparación me sobra:
variable =~ /\w[-.\w]*\@[-\w]+(\.[-\w]+)*\.\w+/


Para mí las expresiones regulares son como escribir a máquina: no es necesario usarlas, pero ahorran mucho tiempo y una vez que sabes, te das cuenta de que hasta el momento has estado haciendo el canelo.


En mucho libros de programación dedican unas páginas a enseñarte qué son las expresiones regulares y cómo se usan en un determinado lenguaje. Pero cuando vi que había un libro exclusivamente dedicado a esto, me pregunté hasta dónde se puede llegar con las expresiones regulares, si pueden ahorrarme aun más trabajo, si me volveré loco aprendiéndolas, etc.

En fin, no pude resistir mi curiosidad y elegí este libro. Por eso y porque mis otras opciones eran Linux Kernel Development y Building Embedded Linux Systems.


Un saludo.

10 comentarios:

NUMA dijo...

definitivamente... eres un friki.

scrufy pringadilla dijo...

Sip..................friki!!!!!!!

Sabes si los buhos de la portada tiene algo que ver con todo esto?

NUMA dijo...

yo creo que no son buhos... pero podemos preguntarle a algún biólogo.

Alvaro dijo...

Si que suena friki si... Ya entiendo por que me aleje de todo ese mundo y me dedique a algo "quiza" menos friki... jejeje

Rikel dijo...

En todos lo libros de la editorial O'Reilly aparecen animales en blanco y negro.

Estos animales no tienen que tener nada que ver con el libro. En este caso quizás han puesto buhos porque tienen muy buena vista y son capaces de encontrar pequeños animales en el bosque igual que las expresiones regulares encuentran frases en megas y megas de texto.
Quizás.

Más friki es leer inmunology...

scrufy pringadilla dijo...

Discrepo, immunobiology tiene bonitos dibujos a color.

Esto:
~ /\w[-.\w]*\@[-\w]+(\.[-\w]+)*\.\w+/

o es frikidad, o es lo que dice los personajes de comic cuando se enfadan.

NUMA dijo...

Sigo manteniendo que no son buhos.

Alvaro dijo...

Si no son buhos son lechuzas... y para el caso es lo mismo: pajaros nocturnos con ojos grandes XD

RIQ dijo...

sigo sin entender nada aparte qeu el virus mio va y viene a saber que sera besitos y no si si eres friki o no¿ define FRIKI?

Wild Runner dijo...

Uf, empiezas a dar miedo ... ¿Desde cuándo usas la instrucción grep? Tomasulo no la explicó!!! JAJAJAJAJA