Ajuda com regex

8 respostas
M

Opa…alguém pode me dizer como funciona o string.matcher("") ? … do jeito que estou fazendo, está retornando sempre false

public static void main(String[] args) {
        String x = "TESTE";
        System.out.println(x.matches("[A-Za-z]"));
        
    }

8 Respostas

T

“[A-Za-z]” pega apenas 1 letra.

Se quiser pegar 1 ou mais letras, use
“[A-Za-z]+”

Se quiser pegar 0 ou mais letras, use
“[A-Za-z]*”

davidbuzatto

Vc está testando apenas um caractere e não uma String com uma quantidade arbitrária de caracteres.

Mude sua expressão regular para “[A-Za-z]+”, ou seja, adiciona um + no final.

M

Valeu amigos…era isso mesmo

Não sabia desse detalhe :smiley:

Só mais uma dúvida…para espaços, como que seria?

[]'s

T

Que tal você dar uma olhada no site do amigo Aurélio (não o do dicionário)? Lá todas as suas dúvidas serão sanadas.

http://aurelio.net/er/ - Portal Brasileiro de Expressões Regulares.

peczenyj

O matches tem um comportamento diferente do find.

Uma coisa é a string casar INTEIRA com uma expressão regular, outra coisa é uma parte dela casar

import java.util.regex.Pattern;


public class Teste {

	public static void main(String[] args) {
		String x = "Teste";
		/* System.out.println(x.matches("[tT]")); */
		System.out.println(Pattern.compile("[tT]").matcher(x).matches());
		System.out.println(Pattern.compile("[tT]").matcher(x).find());
	}
}

A primeira linha equivale a linha comentada, a segunda usamos o método find

Vc pode pensar no string.matches("expressao") como algo do tipo string.matches("^expressao$"), ou seja, do inicio ao fim tem que casar.

No exemplo que eu passei, Teste TEM uma letra t minuscula ou maiuscula, porém não é uma letra apenas.

M

Amigos, estou lendo o aurelio.net mas estou com uma duvida:

preciso validar um cpf que não pode ser igual a [telefone removido] até [telefone removido]…criei a expressão:

dadosPessoais.cpf.numero.matches("(1{11}|2{11}|3{11}|4{11}|5{11}|6{11}|7{11}|8{11}|9{11}|0{11})")

Alguém pode me dizer pq ela está errada?

ps. meu cpf não tem mascara

T

Seu CPF não pode ter dígitos repetidos, é isso?

Normalmente, para não fazer coisas muito complicadas, eu faria com 2 expressões regulares.

String cpf = "[telefone removido]";

if (cpf.matches ("\d{11}") && !cpf.matches ("0{11}|1{11}|2{11}|3{11}|4{11}|5{11}|6{11}|7{11}|8{11}|9{11}")) {
    "CPF válido"
}

Ou seja, é quase o que você fez, só que ao contrário (você estava usando “matches” mas na verdade você precisa de !matches).

peczenyj

Vc pode usar grupos :slight_smile:

public class Teste { public static void main(String[] args) { String x = "[telefone removido]"; System.out.println(x.matches("(\d)\1{10}")); } }

Criado 26 de fevereiro de 2008
Ultima resposta 27 de fev. de 2008
Respostas 8
Participantes 4