Credit image

¿Te gusta el diseño web? ¡Echa un vistazo a la documentación de LenguajeCSS.com!

Introducción a las expresiones regulares

Las expresiones regulares son un sistema cómodo, rápido y potente de realizar un filtrado sobre un determinado caso, y obtener un grupo más reducido y específico, excluyendo los resultados que no coincidan con el patrón dado.

Las expresiones regulares son un sistema cómodo, rápido y potente (una vez se domina) de realizar un filtrado sobre un determinado caso, y obtener un grupo más reducido y específico, excluyendo los resultados que no coincidan con el patrón dado.

Siendo más técnicos, con ayuda de un modelo matemático, llamado DFA (Autómata Finito Determinista) se puede observar como se aceptarían las cadenas que casaran con la expresión regular equivalente abc*.

Partiendo del estado de arranque q0, podemos transitar al estado q1 con el símbolo a y transitar al estado q2 con el símbolo b para llegar a un estado de aceptación (doble trazo) e incluso seguir transitando indefinidamente con el simbolo c, lo que demostraría que las cadena ab, abc, abcc... entrarían dentro de las cadenas que acepta.

Ejemplo práctico


Para comprender esta definición, pondremos un ejemplo.

Tenemos varias carpetas, con miles y miles de imagenes con distintos nombres y formatos (JPG, PNG, GIF...) y nos interesa separar todas las fotografías en las que aparece Ramón (ramon_borracho.jpg, ramon45.jpg, ramon_de_viaje.bmp...).

La primera opción que se nos ocurre es hacerlo de forma manual, cosa que nos consumiría demasiado tiempo si se trata de más de, por ejemplo, 5.000 fotografías.

La siguiente opción es utilizar los comodines (wildcards): Utilizando los comodines * (cualquier conjunto de carácteres) y ? (cualquier carácter, sólo uno), podemos obtener más precisión de una forma sencilla: ramon*.jpg, ramon*.???, *ramon*.*, ...). En estos casos, la potencia de los comodines suele ser suficiente.

Sin embargo, el método anterior es limitado, puesto que, si quisieramos detectar fotografías con nombres como ramón.jpg, r4m0n.jpg, raaamoncito.jpeg pero no incluir román.jpg, romén.jpg y sólo incluir imagenes con formato jpg no habría forma de discriminar entre ambas opciones, salvo utilizando una expresión regular: ^.*ra|4m(o|0|ó)n.*\.jpg$.

Expresiones regulares (metacarácteres)


Ahora la pregunta es... ¿y qué significa ese conjunto de letras sin sentido? Tiene una sencilla explicación:

  • El carácter ^ indica el comienzo de la cadena. Dentro de una clase indica inexistencia.
  • El carácter . es un comodín (cualquier carácter, como ? en wildcards).
  • El carácter * se refiere al carácter (o agrupación) anterior, puede aparecer 0 ó más veces.
  • El carácter + es idéntico al anterior, pero apareciendo 1 ó más veces. Es equivalente a xx*, donde x es el carácter a repetir.
  • Los corchetes [] agrupan carácteres en clases, lo que indica posibilidad.
  • El carácter | indica una alternativa, o lo que está a su izquierda, o lo que está a su derecha.
  • Los paréntesis () realizan una agrupación, generalmente para realizar subexpresiones más complejas, utilizar un carácter especial sobre toda la agrupación o realizar almacenamiento de información para procesado posterior.
  • El carácter \ se utiliza para escapar, o lo que es lo mismo, quitarle el significado especial a un carácter, \* significa asterisco. Además, también tiene muchas opciones para detectar la naturaleza de un conjunto de carácteres (alfabéticos, alfanuméricos, dígitos, espacios en blanco, ...).
  • El carácter ? que indica opcionalidad, puede o no aparecer el carácter predecesor.
  • Las llaves {num} indican que el carácter predecesor aparece num veces.
  • El carácter $ indica el final de la cadena.

Utilidad y aplicación


Como hemos visto anteriormente, la potencia de las expresiones regulares es increíblemente amplia. Suele ser especialmente útil para los programadores (PHP, Perl, Java, .NET...), que pueden desarrollar y reconocer patrones complejos de una forma sencilla.

Pero eso no queda ahí, si no eres programador también puedes hacer uso de las expresiones regulares para múltitud de tareas. Muchas aplicaciones utilizan expresiones regulares y seguro que no tenías ni idea:

  • Bloc de notas: Aunque no el base de Windows, sino notepad2. Especialmente útil para reemplazar cadenas en textos en los que están repetidos varias veces (ficheros HTML, de texto, ...).
  • Comandos UNIX: Comandos de administrador de sistemas como grep, egrep, awk, sed y tantos otros. Recuerda que si usas Windows, puedes utilizar muchos de estos comandos con UNIXUtils.
  • Renombrado masivo: Como en el ejemplo que utilicé, existen multitud de programas para renombrar ficheros utilizando expresiones regulares como RegEx Renamer.
  • Emule: El mismísimo emule permite realizar busquedas con un grupo reducido de expresiones regulares, por ejemplo si queremos buscar canciones que empiecen por Spectrum (para buscar de este grupo musical), podemos escribir ^Spectrum y especificar ficheros de audio, evitando asi canciones que tengan el nombre Spectrum en su título. Además en Preferencias / Opciones adicionales / Mostrar más controles (Controles de modo avanzado) puedes activar las expresiones regulares para filtrar categorías en las pestañas de tráfico.
  • Renombrado de MP3: Con Quick File Rename, se mezcla la potencia de las expresiones regulares a la capacidad de utilizar los tag ID3 para renombrar tus archivos.

Escrito por Manz, el , en ingenieria. Comentarios recibidos: 8.

8 comentarios de lectores
Alejandro
Alejandro
1

Buena introducción. Espero que sigas con artículos sobre este tema.

titeredtrapo
titeredtrapo
2

hola! muy buena informacion... pero tengo una duda: si quiero aplicar esto a torrentss para descargar solo DVDRips de aXXo, FXG, KLAXXON y DiAMOND podría aplicar un filtro como este? .*DVDRip.*(aXXo|FXG|KLAXXON|DiAMOND)* espero tu respuesta! gracias...

Manz
Manz
3

titeredtrapo, desgraciadamente el soporte de expresiones regulares de emule no es tan extenso. Apenas tiene soporte para unas pocas funciones (al menos en la actualidad). Sin embargo, tu expresión regular es correcta. En el caso de funcionar, sería como dices.

Gustavo
Gustavo
4

amigo tendras mas ejercicios de este tipo tengo en mente algo como de las opradoras de telefonia movil y fija los codigos serian 0412 0414 0416 0426 0424 0243 0212 seria algo mas o menos asi: (0)-(2|4)(1-9)(1-9) para el codigo de area y (1-9)(1-9)(1-9)(1-9)(1-9)(1-9)(1-9) para el resto de los otrso 7 numero que debe contener el numero del movil

  • 1
superyiyo
superyiyo
5

No me queda claro como se incluirira la palabra: raaamoncito.jpeg con la expresion regular: ^.*ra|4m(o|0|ó)n.*\.jpg$. no deberia ser: ^.*ra+|4m(o|0|ó)n.*\.jpg$. con + despues de la a???? salu2 superyiyo

Norelis
Norelis
6

Buenos días necesito aplicar expresiones irregulares para un formato de Rif el cual debería ser el siguiente x-xxxxxxxx-x actualmente probé con esta /^[0-9]{1,1}[-. ]?[0-9]{8,8}[-. ]?[0-9]{1,1}$/ pero nada agradecería su colaboración gracias

  • 1
Elmer
Elmer
7

Felicitaciones por tu web Excelente explicacion, por favor puedes poner ejemplos de automatas

Yanies
Yanies
8

Aporto esta herramienta para probar expresiones regulares, tiene ejemplos y glosario: http://www.contadordecaracteres.info/prueba-expresiones-regulares.html

  • 2
Publica tu opinión

Si lo deseas, puedes utilizar el siguiente formulario para publicar tu opinión o responder a alguna de las existentes:

Previsualización

Aquí se previsualizará su comentario. Revise que sea correcto antes de publicarlo.