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
- Desmistificando a Certificação SCJP6 - Parte I
- Desmistificando a Certificação SCJP6 - Parte II
- Desmistificando a Certificação SCJP6 - Parte III
- Desmistificando a Certificação SCJP6 - Parte IV - Parte 1
- Desmistificando a Certificação SCJP6 - Parte IV - Parte 2
- Desmistificando a Certificação SCJP6 - Parte V - Parte 1/3
- Desmistificando a Certificação SCJP6 - Parte V - Parte 2/3
- Desmistificando a Certificação SCJP6 - Parte V - Parte 3/3
- Desmistificando a Certificação SCJP6 - Parte VI - Parte 1/3
- Desmistificando a Certificação SCJP6 - Parte VI - Parte 2/3
- Desmistificando a Certificação SCJP6 - Parte VI - Parte 3/3
- Desmistificando a Certificação SCJP6 - Parte VII - Parte 1/3
- Desmistificando a Certificação SCJP6 - Parte VII - Parte 2/3
- Desmistificando a Certificação SCJP6 - Parte VII - Parte 3/3
- Operadores apropriados - Desmistificando a Certificação SCJP6 - Parte VIII - Parte 1
- Instruções if e switch - Desmistificando a Certificação SCJP6 - Parte VIII - Parte 2
- Iteradores e loops - Desmistificando a Certificação SCJP6 - Parte VIII - Parte 3
- Mini-Teste: Desmistificando a Certificação SCJP6 - Parte VIII - Parte 4 - A
- Mini-Teste: Desmistificando a Certificação SCJP6 - Parte VIII - Parte 4 - B
- Tratamento de Exceções em Java: Desmistificando a Certificação SCJP6 - Parte IX - Parte 1
- Definindo Exceções em Java: Desmistificando a Certificação SCJP6 - Parte IX - Parte 2
- Assertivas Java: Desmistificando a Certificação SCJP6 - Parte IX - Parte 3
- Mini-Teste: Desmistificando a Certificação SCJP6 - Parte IX - Parte 4
- String: Desmistificando a Certificação SCJP6 - Parte X - Parte 1
- StringBuilder/StringBuffer e File: Desmistificando a Certificação SCJP6 - Parte X - Parte 2
- Combinação de Classes E/S: Desmistificando a Certificação SCJP6 - Parte X - Parte 3
- Utilizando Arquivos e Diretórios: Desmistificando a Certificação SCJP6 - Parte X - Parte 4
- Console e Serialização: Desmistificando a Certificação SCJP6 - Parte X - Parte 5
- Mini-teste: Desmistificando a Certificação SCJP6 - Parte X - Parte 6 A
- Mini-teste: Desmistificando a Certificação SCJP6 - Parte X - Parte 6 B
- Expressões Regulares: Desmistificando a Certificação SCJP6 Parte XI - Parte 1
- Metacaracteres Âncora e Busca: Desmistificando a Certificação SCJP6 Parte XI - Parte 3
Artigos relacionados
-
Artigo
-
Artigo
-
Artigo
-
Artigo
-
Vídeo