Bom dia,Senhores.
Este código porduz a saída: 01234456.
[code]public class RegexTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
Pattern pattern=Pattern.compile("\\d*");
Matcher m=pattern.matcher("ab34ef");
boolean b=false;
while(b=m.find())
System.out.print(m.start() +m.group());
}
}[/code]
Quando deveria produzir 234.
Agradeço as explicações.
Pq vc acha que deveria retornar apenas 234 ?
o Operador * retorna uma ou mais ocorrências…e como vc utilizou o método “group()” ele vai agrupar pra os registros encontrados…
eu fiz de uma forma um pouco diferente pra vc entender melhor…
[code]import java.util.regex.*;
public class Teste {
public static void main(String[] args) {
// TODO Auto-generated method stub
Pattern pattern=Pattern.compile("\\d*");
Matcher m=pattern.matcher("ab34ef");
boolean b=false;
while(b=m.find())
System.out.println(m.start()+ " " + m.group());
}
} [/code]
Produz a saída:
0
1
2 34
4
5
6
Para produzir a saída 234 vc deve usar:
[code]import java.util.regex.*;
public class Teste {
public static void main(String[] args) {
// TODO Auto-generated method stub
Pattern pattern=Pattern.compile("\\d+");
Matcher m=pattern.matcher("ab34ef");
boolean b=false;
while(b=m.find())
System.out.println(m.start() + " "+ m.group());
}
} [/code]
d* = zero ou mais ocorrências
d+ = zero ou mais digitos seguidos
Espero ter ajudado…
Está sendo utilizado " * ", que permite zero ocorrências, portanto o Matcher encontra 0 ocorrências na posição 0 e imprime zero, e assim sucessivamente.
Tente executar este código:
public static void main(String[] args) {
Pattern pattern = Pattern.compile("\\d+");
Matcher m = pattern.matcher("ab34ef");
boolean b = false;
while (b = m.find())
System.out.print(m.start() + m.group());
}
[quote=dfsilva86]
d* = zero ou mais ocorrências
d+ = zero ou mais digitos seguidos
Espero ter ajudado…[/quote]
Está errado, o certo é:
d* = zero ou mais digitos
d+ = UM ou mais digitos
[quote]Está errado, o certo é:
d* = zero ou mais digitos
d+ = UM ou mais digitos[/quote]
Valeu pela correção Frango 8)
[quote=dfsilva86][quote]Está errado, o certo é:
d* = zero ou mais digitos
d+ = UM ou mais digitos[/quote]
Valeu pela correção Frango 8)[/quote]
Que isso 
eu confudia isso também hahaha
Ok. entendi.
Alguém pode me explicar quando é necessário montar expressões com colchetes e paranteses??
Obrigado.
[quote=Daniel.F]Ok. entendi.
Alguém pode me explicar quando é necessário montar expressões com colchetes e paranteses??
Obrigado.[/quote]
O parenteses é o grupo, ele procura por um trecho igual ao que esta dentro do parentes.
Ex: (bom dia)+ <–isso quer dizer que voce quer encontrar o grupo “bom dia”, seguido de um ou mais “bom dia”
Já o colchete é um tipo de lista, ela quer dizer que voce quer algo que esteja dentro dela.
Ex: A[bcd] <–isso quer dizer que voce está procurando por um A seguido de um “b” ou um “c” ou um “d”
Não sei se fui bastante claro na explicação, mas aqui segue um link sobre regex muito bom qualquer coisa olha lá que explica melhor.
http://guia-er.sourceforge.net/
Muito Legal a explicação! 