Expressões regulares

Lista,

No trecho abaixo eu verifico se a minhaString contém letras e números. Agora preciso de montar uma expressão regular em que eu verifique se minhaString contem 4 LETRAS MAÍUSCULAS seguidas por 7 números entre zero e nove. Vc pode me ajudar?

Muito obrigado,

Marques

if (!Pattern.matches("[a-z0-9]+", minhaString) { System.out.println("funciona"); }

[A-Z]{4}[0-9]{7}

Att.

valeu peron!!!

Agora que conseguiu resolver sua dúvida, dê uma consultada nesse link
http://java.sun.com/j2se/1.5.0/docs/api/java/util/regex/Pattern.html
Aqui tem todas as regras para produção de expressões regulares em Java

Poderiam me explicar como funciona esse negócio de expressões regulares…não entendi muito bem!:frowning:
agradeço pessoal!:smiley:

Uma analogia é que eles são uma versão “turbinada” daquelas “*” e “?” que servem para filtrar nomes de arquivos.

Por exemplo, se você quer tudo que termina por “.doc”, você usaria o “wildcard” “*.doc”. O equivalente em expressões regulares seria:

.*.doc$

. = qualquer caracter

  • = 0 ou mais vezes
    . = o ponto
    doc = o que deve bater exatamente (doc)
    $ = o fim da expressão.

[quote=thingol]Uma analogia é que eles são uma versão “turbinada” daquelas “*” e “?” que servem para filtrar nomes de arquivos.

Por exemplo, se você quer tudo que termina por “.doc”, você usaria o “wildcard” “*.doc”. O equivalente em expressões regulares seria:

.*.doc$

. = qualquer caracter

  • = 0 ou mais vezes
    . = o ponto
    doc = o que deve bater exatamente (doc)
    $ = o fim da expressão.

[/quote]

poderia me dar um exemplo??como eu usaria??
eu entendi mais ou menos…é como um filtro né???

abraço!

[quote=Marques]
Marques

String minhaString = "Marcos Peron"; if (!Pattern.matches("[a-z0-9]+", minhaString) { System.out.println("funciona"); }[/quote]

olha o exemplo ai…

Akumaldo,
É bem por aí. Suponha por exemplo que vc queira validar uma String que contenha um código de cor hexadecimal(#F456FD, por exemplo). Perceba que esse código tem o seguinte padrão:
-Tem 7 caracteres
-O primeiro caractere é sempre o “#”
-Os demais caracteres são algarismos hexadecimais
Como Verificar isso de forma fácil? Usando uma expressão regular que denote este padrão.
Em Java (Consulte o link que eu postei pro OP), uma regra suficiente para achar um código de cor hexadecimal dentro de uma String seria algo como
#[0-9A-F]{6}
Pra usar isso no Java, vc tem que passar a expressão regular(regex) como uma String. Nunca se esqueça disso!!! No caso então, na situação hipotética citada, fariámos assim em Java:

public boolean matchHexColor(String str){
	String regex = "#[0-9A-F]{6}";
	return str.matches(regex);
}

Agora, se vc quisesse que este método aceitasse (retornar true) códigos hexa independente do case das letras, teríamos:

public boolean matchHexColor(String str){
	String regex = "#[0-9A-Fa-f]{6}";
	return str.matches(regex);
}

Agora, só pra exemplificar uma coisinha, imageine que queiramos aceitar também uma String que seja um código de cor hexa, mas queremos ignorar eventuaisespaços em branco, tabs, quebra de linha, etc, que possam vir antes e/ou depois do nosso código (Algo como dar um trim na String. A regex seria algo assim:
\s*#[0-9A-Fa-f]{6}\s*
Em java vicaria assim:

public boolean matchHexColor(String str){
	String regex = "\s*#[0-9A-Fa-f]{6}\s*";
	return str.matches(regex);
}

Mas por que em Java ficou
\s*#[0-9A-Fa-f]{6}\s*
ao invéz de
\s*#[0-9A-Fa-f]{6}\s*
???
Porque o regex tem que ser uma String, e não existe o caracter de escape “\s”, então temos que usar “\” pra termo apenas um “” (Como se quiséssemos cria uma String com uma data: “13\05\2000”)
Espero ter ajudado.
Qq coisa, postem mais!

[quote=Mantu]Akumaldo,
É bem por aí. Suponha por exemplo que vc queira validar uma String que contenha um código de cor hexadecimal(#F456FD, por exemplo). Perceba que esse código tem o seguinte padrão:
-Tem 7 caracteres
-O primeiro caractere é sempre o “#”
-Os demais caracteres são algarismos hexadecimais
Como Verificar isso de forma fácil? Usando uma expressão regular que denote este padrão.
Em Java (Consulte o link que eu postei pro OP), uma regra suficiente para achar um código de cor hexadecimal dentro de uma String seria algo como
#[0-9A-F]{6}
Pra usar isso no Java, vc tem que passar a expressão regular(regex) como uma String. Nunca se esqueça disso!!! No caso então, na situação hipotética citada, fariámos assim em Java:

public boolean matchHexColor(String str){
	String regex = "#[0-9A-F]{6}";
	return str.matches(regex);
}

Agora, se vc quisesse que este método aceitasse (retornar true) códigos hexa independente do case das letras, teríamos:

public boolean matchHexColor(String str){
	String regex = "#[0-9A-Fa-f]{6}";
	return str.matches(regex);
}

Agora, só pra exemplificar uma coisinha, imageine que queiramos aceitar também uma String que seja um código de cor hexa, mas queremos ignorar eventuaisespaços em branco, tabs, quebra de linha, etc, que possam vir antes e/ou depois do nosso código (Algo como dar um trim na String. A regex seria algo assim:
\s*#[0-9A-Fa-f]{6}\s*
Em java vicaria assim:

public boolean matchHexColor(String str){
	String regex = "\s*#[0-9A-Fa-f]{6}\s*";
	return str.matches(regex);
}

Mas por que em Java ficou
\s*#[0-9A-Fa-f]{6}\s*
ao invéz de
\s*#[0-9A-Fa-f]{6}\s*
???
Porque o regex tem que ser uma String, e não existe o caracter de escape “\s”, então temos que usar “\” pra termo apenas um “” (Como se quiséssemos cria uma String com uma data: “13\05\2000”)
Espero ter ajudado.
Qq coisa, postem mais![/quote]

Grande explicação!:smiley:
acho que agora entendi bem…com isso podemos validar então um CPF???ou placa de carros…ou uma data de aniversário…um campo que só aceita nomes…é isso?

Sim. Outra thread sobre o assunto:

http://www.guj.com.br/posts/list/35496.java

Marcio Kuchma

Como eu posso validar um CPF???
Eu to começado a aprender java e precisava de um método que valida-se um cpf…Brigadao!

Com expressão regular você consegue saber se o FORMATO do cpf é válido (só contém 11 algarismos, pontos, hifen, etc).

Para saber se os números são válidos, procure por “módulo 11” na internet.

Ah, e lembre-se que cpf´s com todos os números iguais seriam válidos de acordo com o algoritmo, mas não são válidos na vida real.

por favor alguém conhece uma expressão regular pra validar da seguinte forma:

  • tem de ter 11 números;
  • nao podem ser iguais tipo 111111111111 22222222222 333333333333…
1 curtida