Sinceramente creo que esta es una de las herramientas más interesantes de las que se dispone para el tratamiento de textos. Para quien no las conozca las expresiones regulares son ‘fórmulas’ que validan textos siguiendo una serie de sencillas reglas, la notación es bastante simple una vez que te acostumbras y la potencia es realmente increíble. Ahora sí, requiere algo de experiencia y construir la expresión con bastante cuidado, ya que esta misma potencia hace que pequeños cambios provoquen grandes diferencias en los resultados.
Si os interesa el tema en
esta página hay toda la información sobre expresiones regulares que podáis necesitar. Si las estáis estudiando ahora mismo en la ingeniería mucho ánimo, como he comentado antes es de lo más interesante que os van a enseñar, así que no desaprovechéis el esfuerzo.
Pero... ¿qué son exactamente? Pues básicamente definen patrones de texto. Normalmente se utilizan para comprobar que un texto de entrada coincide con el patrón definido para el mismo. Por ejemplo, para un ejemplo sencillo podemos construir una expresión regular que nos valide una cadena compuesta solo por letras que empieza por mayúscula y después tiene un número indeterminado de minúsculas:
^[A-Z]{1}[a-z]*$
Como veis es bastante simple. Además la clase String de java nos proporciona el método
matches que nos indica si la cadena coincide con la expresión regular pasada por parámetro. Así el código java para comprobar si nuestra cadena coincide con el patrón definido sería:
...
private static final String PATRON = “^[A-Z]{1}[a-z]*$”;
...
String cadenaAValidar = …
if (cadenaAValidar.matches(PATRON)) {
...
}
else {
...
}
...
Como veis este ejemplo es en realidad bastante sencillo, pero plantearos la siguiente pregunta: ¿cómo tendríamos que hacerlo sin usar una expresión regular? ¿Cuántas líneas de código y posibilidades de error nos llevaría una solución ‘programática’?
Esto tiene muchísimas utilidades, desde validaciones simples como la del ejemplo, búsquedas en textos, creación de lenguajes de programación y sus compiladores, … Pero creo que el mejor ejemplo nos lo proporciona la siguiente viñeta de
xkcd.