segunda-feira, 8 de fevereiro de 2010

Expressões Regulares no Groovy

Bom dia a todos! Hoje venho postar um breve tutorial sobre mais este poderoso recurso do Groovy.
Como sabemos, não exite uma ferramenta mais poderosa para processar grandes arquivos de texto rapidamente e confiavelmente.
Em Java, as expressões regulares tem a reputação de serem complexas e difíceis de se manter. Até o Java 1.4, sequer tinhamos classes nas bibliotecas padrões do Java.
E, infelizmente os famosos Pattern e Matcher não fizeram muito para melhorar a situação.
O Groovy tem mais uma forma de se declarar Strings que se chama slashy string.
assert java.lang.String == /olá slashy string/.class
A única diferença entre este tipo de string e as de aspas duplas, é que estas não precisam ser escapadas por barras invertidas.
assert "Eu tenho \\d anos de idade." == /Eu tenho \d anos de idade./
Isso pode fazer com que suas expressões regulares fiquem muito mais fáceis de serem lidas.
Uma slash string é uma GString, portanto, todas as substituições de variáveis são executadas normalmente.
def time = "1:42 PM"
assert "A hora é 1:42 PM" -- /A hora é $time/ 
Exemplo de expressão regular usando Groovy.
def time = /([0-9]|10|11|12):([0-5][0-9]) (AM|PM)/
O Groovy utiliza as classes Pattern e Matcher como no Java, só que de forma mais transparente.
1. O operador ~ precedendo uma String, irá criar automaticamente um objeto do tipo Java Pattern.
assert java.util.regex.Pattern = (~/groovy/).getClass()
2. O operador =~ vai receber uma string e uma regexp e criar um objeto Matcher.
def myMatcher = ("54417" =~ /\d{5}) // Procura por exatos 5 digitos
assert myMatcher.matches()
assert java.util.regex.Matcher == myMatcher.getClass()
3. O operador ==~ é um operador boleano para testar se uma string segue um determinado padrão.
assert ("54418" ==~ /\d{5}/ == true

Construções básicas de expressões regulares em Groovy.
def regex = /foobar/
assert ("foobar" ==~ regex)

["a", "b", "c"].each { character ->
 assert( character ==~ /[abc]/
}


Como podemos ver, é muito mais simples escrever uma regex em Groovy.
O resto, é tudo igual a Java. O meu objetivo aqui não é ensinar tudo sobre regex, caso tenha alguma dúvida, de uma olhada no site da sun:
Tutorial Regex.
É isso ai galera, mais uma coisa aprendida!
Abraços

Nenhum comentário:

Postar um comentário

Seguidores