Avaliaremos qual seria a regexp para casar com um horário, por exemplo, 22:56.

[0123456789][0123456789]:[0123456789][0123456789]

Pattern p = Pattern.compile([0123456789][0123456789]:[0123456789][0123456789]);

Matcher m = p.matcher (O horário é 22:56);

Saída:

Padrão: [0123456789][0123456789]:[0123456789][0123456789]

12 22:56

Entretanto, ainda não está 100%, pois se o Matcher fosse 77:77 haveria casamento ou coincidência, e temos ciência que essa não é uma hora válida.

Como iria ser uma regexp que casasse precisamente somente uma letra minúscula, maiúscula uma e números? Solução:

[a-zA-Z0-9]

Imaginemos a seguinte situação: o Matcher é 14-45 12345. Qual seria o Pattern para casá-lo. De modo óbvio, a dificuldade é o traço, que é especial. Então observe como resolver esse problema.

Pattern p = Pattern.compile([0-9][0-9]:[0-9][0-9]);

Matcher m = p.matcher (22-46 98765);

Saída:

Padrão: [0-9][0-9]:[0-9][0-9]

0 22-46

6 98765

Lista negada

A lista negada tem uma lógica inversa. Observe que a diferença em sua notação é que o 1º caractere da lista é um circunflexo.

Pattern p = Pattern.compile([^Xxx]);

Matcher m = p.matcher (XxxY);

Padrão: [^Xxx]

3 Y

Vejamos agora o segundo tipo de metacaracteres, que são os quantificadores, que são úteis para indicar o número de repetições permitidas para a entidade prontamente anterior. Eles dizem a quantidade de vezes que o átomo anterior pode aparecer e quantas repetições pode ter.

Continuemos com um exemplo do opcional (?). Observe que sigamos primeiramente a sequência: primeiro lê-se o átomo por átomo, após compreende-se o todo e depois se analisam as probabilidades. Avaliemos a expressão:

canta[r!]?

Fica um c seguido de um a seguido de um n seguido de um t seguido de um a, seguido de um r,ou ! ou ambos opcionais. Veremos ver como fica em um código .

Pattern p = Pattern.compile(“canta[r!]?);

Matcher m = p.matcher(Preciso cantar, canta, cantar!, canta!);

Saída:

O padrão é: fala[r!]?

8 cantar

16 canta

23 cantar

32 canta!

O opcional (?) proporciona que a entidade anterior esteja presente ou não, o asterisco é ainda mais permissivo, uma vez que, para ele, pode existir, não existir, ou não existir diversos. Ou seja: a entidade anterior pode aparecer em qualquer quantidade.

Expressão Combina com
7*0 70,770,7777770, 7777777777770
xi*p xip, xiip,xiiiiiiiiiiiiiiiip
x[ip]* x, xi, xip,xiiiiiip,xpppppppp
</?[AElaei] *> </A >, <i >, </B>

Observe o código a seguir:

Pattern p = Pattern.compile(“d[ef]+x”);

Matcher m = p.matcher(“dffffeeefffffeeeexzdefx”);

Saída:

Padrão: d[ef]+x

0 dffffeeefffffeeeex

19 defx

Na próxima parte abordaremos metacaracteres do tipo âncora e busca usando metacarcteres.


Leia todos artigos da série