Problema com regex

9 respostas
C

Estou usando regex para encontrar um telefone no meio de uma string, mas o telefone não ta formatado, apenas números:

p = Pattern.compile("[0-9]{3,9}[0-9]{4}");

To fazendo dessa forma pq ele retorna telefones de 8 até 13 algarismos, o problema é q as vezes em um telefone tipo esse: 1234567890123 as vezes ele pega inteiro, as vezes só retorna: 12345678 e telefones do tipo: [telefone removido] só retorna em alguns casos: 12345678.
O que eu faço para pegar todos esses casos de 8 à 13 algarismos mas sem pegar pela metade?

9 Respostas

T

Acho que sua expressão regular podia ser mais simples:

“\d{8,13}”

B

Para conhecimento:

Expressões regulares são normalmente gulosas, tendem a comer todas os caracteres que vem pela frente, até quanto o caracter acaba. Em outras palavras, casam o máximo possível que conseguem.

Se quiser casar de 8 a 13 algarismos simplesmente faça [0-9]{8,13}

C

thingol:
Acho que sua expressão regular podia ser mais simples:

“\d{8,13}”

Pra que simplicaficar se vc pode complicar neh? :lol:
Vlw cara

C

Puts, começou a dar uns probleminhas … eu to usando “\d{7,13}” . Quando aparece um telefone de 13 dígitos as vezes ele pega os 13, as vezes só 7 e assim vai…
Como posso resolver isso? :s

T

Mostre os casos para os quais você está tendo problemas. Que eu saiba, \d{7,13} deve bater com números de 7 a 13 dígitos. Se houver alguma coisa no meio, obviamente você vai ter problemas e vai ter de usar uma expressão mais complicada. Digamos que o número seja

+55-11-2345-7890

Obviamente isso é um número de telefone válido (internacional), mas não bate com a sua expressão.

C

não, ele vem apenas com números, nada no meio.

T

Pergunta boba número 2. Você usa Matcher.matches, Matcher.find, qual o método que você está usando?

C

Matcher.find

T

Hum… Estranho. O programa abaixo deve gerar a saída esperada abaixo:

import java.util.regex.*;

class TesteTelefones {
    public static void main(String[] args) {
        String teste = "Esta lista de 00 telefones contem os numeros: 1234567, " 
        + "12345678, 123456789, [telefone removido], " 
        + "[telefone removido], [telefone removido], 123456789012, " 
        + "1234567890123, 12345678901234, 123456789012345";
        Pattern pat = Pattern.compile ("\d{8,13}");
        Matcher mat = pat.matcher (teste);
        while (mat.find()) {
            System.out.println ("Found: [" + mat.group() + "]");
       }
   }
}
Found: [12345678]
Found: [123456789]
Found: [[telefone removido]]
Found: [[telefone removido]]
Found: [[telefone removido]]
Found: [123456789012]
Found: [1234567890123]
Found: [1234567890123]
Found: [1234567890123]
Criado 17 de julho de 2009
Ultima resposta 20 de jul. de 2009
Respostas 9
Participantes 3