El mundo de las expresiones regulares es muy vasto y nos puede traer muchos dolores de cabeza. Sin embargo, nos aportan un grado de flexibilidad en muchas tareas cotidianas tanto para programadores como para administradores de sistema.
Las expresiones regulares nos permiten definir patrones a buscar en una cadena de caracteres, por ejemplo, buscar en un documento de texto todos los correos electrónicos que aparecen en él, buscar todos los archivos de una carpeta que contengan en su nombre una palabra o una fecha concreta.
En el mundo Linux tenemos herramientas como sed que nos permiten editar un texto buscando un patrón y substituirlo por otro texto. Pongamos por ejemplo, imaginemos que tenemos un fichero html donde queremos substituir todos los tags <span class=»rojo»> por <span class=»verde»> podriamos utilizar el siguiente comando en linux para hacerlo de un plumazo:
sed -i 's/<span class="rojo">/<span class="verde">/' < foo.html
Si bien es un ejemplo muy sencillo de sed, no aprovecha en absoluto las posibilidades de las expresiones regulares.
Supongamos que queremos buscar todos los Alvarez en un documento con los apellidos de nuestros clientes, el problema es que nuestros usuarios no son muy rigurosos y algunos lo han escrito como Álvarez, otros como alvares, otros álvarez i otros alvares. Esto causa un problema, la búsqueda de Alvarez descartará las demás opciones, así que, ¿cómo lo haríamos con expresiones regulares?
Primero vemos que tenemos un grupo de errores comunes que son, la A, la Á, la a y la á. Un grupo de posibilidades se define entre corchetes ( [ÁAaá] ). El segundo problema es la gente que no lo escribe con z sino con s, definamos otro grupo [sz]. El patron quedaría entonces así: /[ÁAaá] lvare[sz]/ ( podéis probar estas expresiones en la siguiente página.
</p> <p style="text-align: justify;">sed -i ' /[ÁAaá] lvare[sz]/' < foo.txt</p> <p style="text-align: justify;">
Esto es todo por hoy, es una pequeña introducción, cuando pueda subiré más sobre expresiones regulares.
PD: os dejo un link con información extra!