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.