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