Una de las herramientas más potentes y a la vez más avanzadas que puede tener cualquier persona que "flirtee" con código y tratamiento de texto, son las expresiones regulares. Una aplicación directa de las expresiones regulares es la detección de patrones dentro de textos o la validación de los mismo de acuerdo a un patrón.
Dicho más formalmente, las expresiones regulares son un lenguaje para la descripción de lenguajes. Una expresión regular define un lenguaje. Por ejemplo, la expresión regular /[a-z]+/
define el lenguaje formado por las cadenas que consisten en repeticiones de una o mas letras minúsculas.
En el ejemplo la expresión sólo nos encontraría aquellas palabras que tuviesen todas las letras en minúsculas. En este conjunto por consiguiente se excluirían todos los nombres propios, las primeras palabra tras un punto por ir escribirse en mayúsculas o incluso aquellas palabras que van todas sus letras en mayúsculas. Para ello basta incluir en la expresión anterior el conjunto de la mayúsculas, pudiendo aparecer ninguna mayúscula o n mayúsculas del conjunto de las letras mayúsculas. La expresión quedaría tal que así /[A-Z]*[a-z]+/
. A continuación se adjuntan un par de tablas con la sintaxis que define las expresiones regulares. Puede ayudaros a entender mejor las dos que os he presentado y puede ayudaros a generar otras nuevas.
Algunos metasímbolos usados en las expresiones regulares
* | El elemento precedente debe aparecer 0 o más veces |
+ | El elemento precedente debe aparecer 1 o más veces |
. | Un carácter cualquiera excepto salto de línea |
? | Operador unario. El elemento precedente es opcional |
{n} | Que coincida exactamente n veces |
{n,} | Que coincida al menos n veces |
{n,m} | Que coincida al menos n veces y no mas de m |
| | O uno u otro |
^ | Comienzo de línea |
$ | Fin de línea |
. | Cualquier carácter que no sea el retorno de carro |
[...] | Conjunto de caracteres admitidos |
[^...] | Conjunto de caracteres no admitidos |
- | Operador de rango |
(...) | Agrupación |
\ | Escape |
\n | Representación del carácter fin de línea |
\t | Representación del carácter de tabulación |
Abreviaturas para las clases más comunes en las expresiones regulares
Código | Significado |
\d | [0-9] Dígitos del 0 al 9 |
\D | [^0-9] Carácter que no sea un dígito |
\w | [a-zA-Z0-9_] Carácter alfanumérico |
\W | [^a-zA-Z0-9_] Carácter no alfanumérico |
\s | [ \t\n\r\f] Espacio en blanco |
\S | [^ \t\n\r\f] Carácter que no es un espacio en blanco |
No obstante la definición de estas expresiones, dependiendo de la dificultad del patrón a definir, puede no siempre ser trivial. A esto se le suma la experiencia que pueda tener cada uno para definir dichas expresiones. Por eso herramientas como RegExr me parecen imprescindibles: una herramienta online para aprender, construir y probar expresiones regulares.
RegExr: http://regexr.com
Algunas de las características más destacadas de RegExr son:
- Resultados actualizados en tiempo real, mientras tecleas
- Información detallada de cada expresión cuando pasas sobre ella
- Extensa batería de ejemplos y chuletas
- Deshacer y Rehacer muy sencillo
- Puedes compartir tus patrones y expresiones y votar las del resto de la comunidad (y "favoritearlas")
Si queréis recordar/practicar expresiones regulares, o simplemente queréis aprender practicando, os animo a que hagáis algunas pruebas con la herramienta. Recordad que podéis probar a usar las dos expresiones que aparecen en esta entrada si no sabéis por donde empezar.