Java

Thursday, May 11, 2006

 

Regex

Para usar regex em java, nos valemos das classes Pattern e Matcher. Criamos uma expressão regular assim:

Pattern p = Pattern.compile("ab"); //onde "ab" é a expressão regular.

A String que servirá de base para a busca, criamos assim:

Matcher m = p.matcher("abaaaba");

Por fim, usamos os métodos find(), start(), group() de Matcher para obter as expressões capturadas pela expressão regular e o índice na string de base onde elas ocorrem.

boolean b = false;
while (b=m.find()){
System.out.print(m.start() + " "+m.group());//imprie o índice onde começa uma expressão capturada e o a própria expressão.
}

Metacaracteres relevantes:

\d -> digitos
\w -> caracteres alfanuméricos e underscore "_"
\s -> espaço
[abc] -> uma das letras a,b ou c
[a-f] -> uma letra em a e f
[a-fA-F] -> uma letra entre a e f, e A e F
+ -> uma ou mais ocorrências
* -> zero ou mais ocorrências
? -> zero ou uma ocorrência
. -> qualquer caractere
^ -> negação
*,+,? -> são interpretados gulosamente
*?,+?,?? -> são interpretados de maneira relutante
() -> Agrupa elementos

Exemplos:

padrão: .*xx
string: yyxxxyxx
Resultado: 0 yyxxxyxx

padrão: .*?xx
string: yyxxxyx
Resultado: 0 yyxx 4 xyxx

padrão: 0[xX]([0-9a-fA-F])+
string:12 0x 0x12 0xFF 0xg"
Resultado 6 0x12 11 0xFF

Um ponto importante a ser observado sobre os metacaracteres é que eles não podem ser atribuídos a uma string dessa maneira:

String qualquer="xxx\d";

Pois o compilador, ao encontrar \, vai procurar uma sequência de escape, no entanto, não existe a sequência de escape \d. Para que este erro de compilação não ocorra, o código deve ficar:

String qualquer="xx\\d"

Usamos uma contrabarra determinar que a próxima contrabarra deve ser lida literalmente.

Comments: Post a Comment



<< Home

Archives

March 2006   April 2006   May 2006   July 2006   August 2006  

This page is powered by Blogger. Isn't yours?