Groovy tiene soporte nativo para expresiones regulares, con una sintaxis muy simple de usar.
Primero un detalle importante que todavía no vimos. En Groovy hay dos formas de delimitar un String. La común es con el uso de comillas ("), pero también puede usarse la barra de dividir (/). Por ejemplo:
"invasor" == /invasor/
La ventaja es que al usar barras no es necesario escapar las contrabarras y otros caracteres "raros". Esto simplifica mucho la escritura de expresiones regulares.
Las expresiones regulares son muy versátiles para el procesamiento de textos. Brindan la posibilidad de buscar y extraer patrones (pattenrs) de un string. El ejemplo más simple de una expresión regular es una string con letras y números. Y la expresión más simple con una expresión regular es con el operador ==~
Por ejemplo, la siguiente expresión se evalúa en verdadero:
"perro" ==~ /perro/
El operador ==~ es equivalente al operador ==, pero trata de igualar patrones. La expresión regular está encerrada entre barras /. Esto le dice a Groovy que se trata de una expresión regular, y no es un simple String.
Pero las expresiones regulares pueden hacer mucho más. Por ejemplo, supongamos que nos interese tanto la palabra "perro" como "perros". Una expresión regular que nos sirve sería:
"perro" ==~ /perros?/ "perros" ==~ /perros?/
Ambas expresiones evaluán a verdadero. El caracterer "?" indica que la letra anterior es opcional.
Obviamente podemos construir cosas más complejas:
"invasor" ==~ /invasor(es)?/
En este caso, usamos los paréntesis para agrupar una expresión. Así, el texto "es" es opcional.
Vamos a aclarar conceptos entonces. Groovy tiene tres operadores para expresiones regulares:
Por ejemplo:
//esto es verdadero "El invasor Zim es del Imperio Irken" =~ /invasor/
Esa expresión se evalúa en verdadero. Sin embargo:
//esto es falso! "El invasor Zim es del Imperio Irken" ==~ /invasor/
También es posible evaluar expresiones regulares de manera programática, definiendo un patrón, creando el matcher y aplicándolo.
def pattern = ~/groovy/ def matcher = pattern.matcher('mi groovy amigo') assert matcher.find() assert matcher.matches() == false
El método matcher.find() es equivalente al operador =~ y el método matcher.matches() es equivalente a ==~
Se pueden construir expresiones regulares mucho más complejas, que escapan a este tutorial. Hay muchas guías en internet para aprender más sobre las expresiones regulares.