Expressões Regulares

4 respostas
luiz_renato

Caros colega,

Estou apanhando de expressões regulares e gostaria que me explicassem o seguinte codigo :

Pattern p = Pattern.compile("\\.*aa");
Matcher m = p.matcher("adefaa eea eeaa");
boolean b = false;
while ( m.find() ) {
		System.out.println( m.start() + " " + m.group());
}

A saída é:
4 aa
13 aa

Se o ponto ( .) significa qualquer “coisa” e o asterisco “*” 0 ou mais dessa “coisa” não deveria ser 4 adefaa 13 eeaa ?

Luiz Renato

4 Respostas

Eric_Yuzo

O ponto sozinho (.) representa qualquer caracter. Mas se tiver uma barra na frente (\.), a regex irá procurar apenas o caracter ponto.

Neste caso, ele não está encontrando o ponto, que não é obrigatório devido o asterisco. Mas em seguida está encontrando os caracteres “aa”.

luiz_renato

Fala Eric!!

Agora entendi . Eu pensava justamente o contrário pq no caso de d p/ numeros usa-se \

Valeu!!

Eric_Yuzo

Entendi o motivo de sua dúvida. É que o conjunto de números é representado por \d, por isso coloca-se as barras.

Os caracteres que possuem função especial na regex, se forem precedidos pela barra invertida serão lidos como um caracter comum sem nenhuma função especial. Esta regra se aplica inclusive para a própria barra.

Quando foi passado “\.*aa”, a regex estará fazendo a leitura como se fosse “.*aa”.

Falou…

charlesbraw

Usando

você verá o que a regex estará lendo.

veja que a saída é “.*aa”.

Conforme o Eric Yuzo disse

Criado 16 de setembro de 2010
Ultima resposta 16 de set. de 2010
Respostas 4
Participantes 3