Vamos agora abordar os metacaracteres tipo âncora. Inicialmente, por que a nomenclatura âncora? Porque eles não definem caracteres ou casam quantidades, no lugar disso eles marcam uma posição específica na linha. Veremos o primeiro metacaractere-âncora, que é o circunflexo.
^[0-9] buscamos linhas que começam com números. Observe o código.
Pattern p = Pattern.compile(“^[0-9].*”);
Matcher m = p.matcher(“787Devmedia”);
Saída:
Padrão: ^[0-9]
0 787Devmedia
^[^0-9] buscamos linhas que não começam com números. O 1º circunflexo é a âncora e o 2º é a negação da lista.
Complementar e semelhante ao circunflexo, o cifrão marca o fim de uma linha e só é válido no fim da expressão. Como o exemplo acima, [0-9]$ combina com linhas finalizadas com um número.
Agora que vimos um pouco mais sobre regex, os códigos de exemplo farão bem mais sentido. Eis um exemplo mais complexo de uma fonte e de uma expressão:
Pattern p = Pattern.compile(“aba”);
Matcher m = p.matcher(“abababa”);
Quantas ocorrências temos neste trecho de código? Normalmente existe uma ocorrência começando na posição 0 e outra na posição 4. Mas e quanto àquela na posição 2? Geralmente no mundo regex, a String aba, que começa na posição 2, não será avaliada como uma ocorrência válida. A 1ª regra de busca regex é: uma busca regex é executada da esquerda para direita e, logo após um caractere da fonte tenha sido utilizado em uma ocorrência, ele não pode mais ser reutilizado.
Busca Usando Metacaracteres
Pattern p = Pattern.compile(“\\d”);
Matcher m = p.matcher(“aaa1x2y3”);
Regex nos diria que achou digitos nas posições: 3 5 7
Regex permite um rico conjunto de metacaracteres que podemos encontrar descritos na documentação API para java.util.regex.Pattern. Não veremos todos aqui, entretanto descreveremos aqueles que serão necessários para o exame.
- \d Um dígito
- \s Caractere de espaço em branco
- Pattern p = Pattern.compile(“\\s”);
- Matcher m = p.matcher(“aaa 1x2 y3”);
- \w Caractere de palavra, que pode ser dígito, letra ou underscore _
- Pattern p = Pattern.compile(“\\w”);
- Matcher m = p.matcher(“x 45 _A”);
Retorna os indices 3 7
Retorna os indices 0 2 3 5 6
Também é possível especificar um conjunto de caracteres a serem procurados utilizando colchetes; e intervalos de caracteres a serem procurados usando colchetes e um hífen.
- [def] Procura apenas por d’s, e’s ou f’s
- [b-e] Procura apenas pelos caracteres b, c, d ou e.
Na continuação veremos Tokenização.
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
- Lista Negada e Metacaracteres: Desmistificando a Certificação SCJP6 Parte XI - Parte 2