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>

 

O metacaractere (+) tem funcionamento muito parecido com o asterisco, tudo o que vale para um também se aplica ao outro. A única diferença é que o mais não é opcional, sendo assim, a entidade anterior deve casar pelo menos uma vez e pode ter várias ocorrências.

Expressão

Combina com

9+0

90, 990, 99999999990

xy+z

xyz, xyyz, xyyyyyyyyyyyyz

a[bc]+x

abx,abbbbx, accccx, abcbbcccx,acbx

 

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