Dúvida em Regex

8 respostas
D

Bom dia,Senhores.

Este código porduz a saída: 01234456.
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());
        
	}

}

Quando deveria produzir 234.
Agradeço as explicações.

8 Respostas

dfsilva86

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...

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());   
		           
		    }   
		  
		}

Produz a saída:
0
1
2 34
4
5
6

Para produzir a saída 234 vc deve usar:

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());   
		           
		    }   
		  
		}

d* = zero ou mais ocorrências
d+ = zero ou mais digitos seguidos

Espero ter ajudado...

davidtiagoconceicao

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());
	}
Nykolas_Lima

dfsilva86:

d* = zero ou mais ocorrências
d+ = zero ou mais digitos seguidos

Espero ter ajudado…


Está errado, o certo é:

d* = zero ou mais digitos
d+ = UM ou mais digitos

dfsilva86

Está errado, o certo é:

d* = zero ou mais digitos
d+ = UM ou mais digitos

Valeu pela correção Frango 8)

Nykolas_Lima

dfsilva86:
Está errado, o certo é:

d* = zero ou mais digitos
d+ = UM ou mais digitos

Valeu pela correção Frango 8)

Que isso :smiley:

eu confudia isso também hahaha

D

Ok. entendi.
Alguém pode me explicar quando é necessário montar expressões com colchetes e paranteses??
Obrigado.

Nykolas_Lima

Daniel.F:
Ok. entendi.
Alguém pode me explicar quando é necessário montar expressões com colchetes e paranteses??
Obrigado.

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/

jbjares

Muito Legal a explicação! :slight_smile:

Criado 20 de março de 2009
Ultima resposta 21 de mar. de 2009
Respostas 8
Participantes 5