Lista Negada e Metacaracteres: Desmistificando a Certificação SCJP6 Parte XI - Parte 2

Trataremos um pouco mais sobre lista (focaremos em lista negada) e metacaracteres.

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

Artigos relacionados