E ae galera blz?
Minha dúvida é com relação a esse código que aparece aqui em um livro para certificação que estou lendo:
[code]public class Regex {
static public void main(String[] args){
Pattern p = Pattern.compile("[ar]*");
Matcher m = p.matcher(“arara”);
boolean b = false;
System.out.println("O padrão é: " + m.pattern());
while(b = m.find())
System.out.println(m.start() + " " + m.group());
}
}[/code]
a saída é:
O padrão é: [ar]*
0 arara
5
Eu entendi que [ar] é uma lista e que se eu não usar o * essa expressão casa com a letra “a” ou com a letra “r”:
O padrão é: [ar]
0 a
1 r
2 a
3 r
4 a
mas não sei se entendi direito porque quando coloco o * a expressão casa com “arara”. Tem a ver porque o * é guloso e vai casando com cada letra sem parar? Poderiam me esclarecer melhor essa questão?
Obrigado pessoal. =)
Você está vendo da maneira correta.
Você tem que ler uma expressão regular átomo à átomo. a expressão [ar] casa com somente 1 caractere, então no caso casaria com todos os caracteres da sua String, mas somente um de cada vez.
Agora se você usa um quantificador, você está dizendo que quer casar com quantos [ar] tiverem na sua String, portanto ele vai casando com tudo o que consegue, e no final casa com a String inteira.
Fez sentido?
Bom, acho que entendi sim. Obrigado! Se alguém quiser fazer mais alguma observação que ache relevante fique a vontade pois me ajudará bastante já que em janeiro prestarei a prova para certificação.
abraço.
Como você suspeitou, o [] recebe uma lista de valores, e casa algum deles.
No caso, casa com ‘a’ ou ‘r’
Você pode usar faixa de valores também: [a-z] casa com qualquer letra minúscula do alfabeto.
Porém, só casa uma vez. Pois só tem um par de colchetes com os valores.
Pra casar mais, use os caracteres quantificadores.
O * quer dizer: nenhuma ou mais vezes.
Ou seja, [ar]* quer dizer ‘casa com a ou r quantas vezes aparecerem’ ou ‘a expressão anterior, [ar], se repete nenhuma ou mais vezes’
[ar]{3} = ‘casa com a ou r 3 vezes’ ou ‘a expressão anterior, [ar], se repete 3 vezes’
Se você quiser que se repita pelo menos uma vez, use ‘+’ em vez de *
[ar]+ = ‘a expressao anterior, [ar], aparece uma ou mais vezes’
Dá uma pesquisa sobre Expressões Regulares, não precisa ser especificamente em Java, regex é algo universal.
Obrigado digaoneves e jarlisson,
Tudo ficou mais claro agora. Vou estudar mais um pouco de expressões regulares aqui.
abraço.