? - Apenas uma ou nenhuma vez
a? encontraria a, ou a ausência de a. Ele se aplica
ou ao caractere que imediatamente o precede, ou a um
grupo (se o grupo imediatamente o precede) ou a uma
classe de caracteres (se a classe de caracteres o
precede).
* - Zero ou mais vezes
Este padrão se parece muito com o padrão ?, exceto
que ele encontra zero ou mais ocorrências. Ele não
encontra "qualquer caractere", como seu uso em DOS
poderia sugerir. Assim, a* encontraria a, aa, aaa,
ou a ausência de a. Ele se aplica ou ao caractere que
imediatamente o precede, ou a um grupo (se o grupo
imediatamente o precede) ou a uma classe de caracteres
(se a classe de caracteres o precede).
+ - Uma ou mais vezes
Este padrão se parece com o padrão *, exceto que agora
buscamos a existência de uma ou mais ocorrências, em
vez de zero ou mais ocorrências. Ele se aplica ou
ao caractere que imediatamente o precede, ou a um
grupo (se o grupo imediatamente o precede) ou a uma
classe de caracteres (se a classe de caracteres o
precede).
{n} - Exatamente n vezes
Este quantificador exige a ocorrência do padrão
exatamente n vezes. Ele se aplica ou ao caractere
que imediatamente o precede, ou a um grupo (se o grupo
imediatamente o precede) ou a uma classe de caracteres
(se a classe de caracteres o precede).
{n,} - No mínimo n vezes
Este quantificador exige a ocorrência do padrão
no mínimo n vezes. Ele se aplica ou ao caractere
que imediatamente o precede, ou a um grupo (se o grupo
imediatamente o precede) ou a uma classe de caracteres
(se a classe de caracteres o precede).
{n,m} - No mínimo n e não mais que m vezes
Este quantificador exige a ocorrência do padrão
no mínimo n vezes e não mais que m vezes. Ele se aplica
ou ao caractere que imediatamente o precede, ou a um
grupo (se o grupo imediatamente o precede) ou a uma
classe de caracteres (se a classe de caracteres o
precede).
Para ilustar o uso de quantificadores, vamos imaginar que a regra de nomes de senhas da empresa seja de 5 letras minúsculas de a-z (sem acentos) seguidas por 3 dígitos de 0-9. Veja como esta expressão regular pode ser montada:
import java.io.*;
public class Estudos{
public static void main(String args[]){
Console console = System.console();
String valor = console.readLine("Informe um valor: ");
String padrao = "[a-z]{5}\\d{3}";
if(valor.matches(padrao))
System.out.println("Valor válido.");
else
System.out.println("Valor inválido.");
}
}
Vamos ver uma expressão regular mais complexa? Suponhamos que a empresa queira um padrão de senhas que seja de 6 caracteres (três caracteres de a-z e três dígitos de 0-9) em qualquer ordem e talvez misturados. Veja o código:
import java.io.*;
public class Estudos{
public static void main(String args[]){
Console console = System.console();
String valor = console.readLine("Informe um valor: ");
String padrao = "([a-z]*\\d[a-z]*){3}";
if((valor.matches(padrao)) && (valor.length() == 6))
System.out.println("Valor válido.");
else
System.out.println("Valor inválido.");
}
}