Expressões Regulares para Validação de Strings em Java

Expressões regulaers são ferramentas poderosas para validação de padrões em strings. Este artigo explora seu uso em Java, com exemplos práticos de validação e uma visão geral da sintaxe.

Validação de um Identificador Numérico

Considere a necessidade de validar um identificador numérico com as seguintes regras: comprimento entre 6 e 20 caracteres, o primeiro caractere não pode ser zero, e todos os caracteres devem ser dígitos.

Implementação sem Expressões Regulares

Uma abordagem tradicional usando métodos de String e loops:


public class Validador {
    public static void main(String[] args) {
        String idNumerico = "0123456789";
        System.out.println(validar(idNumerico));
    }

    public static boolean validar(String entrada) {
        int comprimento = entrada.length();
        if (comprimento < 6 || comprimento > 20) {
            return false;
        }
        if (entrada.startsWith("0")) {
            return false;
        }
        for (int indice = 0; indice < comprimento; indice++) {
            char caractere = entrada.charAt(indice);
            if (caractere < '0' || caractere > '9') {
                return false;
            }
        }
        return true;
    }
}

Implementação com Expressões Regulares

Utilizando o método matches com uma expressão regular concisa:


public class ValidadorRegex {
    public static void main(String[] args) {
        String idNumerico = "0123456789";
        String padrao = "[1-9]\\d{5,19}";
        boolean ehValido = idNumerico.matches(padrao);
        System.out.println(ehValido);
    }
}

Classes de Caracteres

Classes de caracteres permitem definir conjuntos de caracteres para correspondência.

Expressão Descrição
[abc] Corresponde a um único caractere: 'a', 'b' ou 'c'.
[^abc] Corresponde a qualquer caractere exceto 'a', 'b' ou 'c'.
[a-zA-Z] Corresponde a um caractere no intervalo de 'a' a 'z' ou 'A' a 'Z'.
[a-d[m-p]] União dos intervalos 'a' a 'd' e 'm' a 'p'.
[a-z&&[def]] Interseção: apenas 'd', 'e' ou 'f'.
[a-z&&[^bc]] Interseção negativa: equivalent a [ad-z].
[a-z&&[^m-p]] Interseção negativa: equivalent a [a-lq-z].

Exemplos de Classes de Caracteres

Alguns testes práticos para ilustrar:


// [abc]
System.out.println("a".matches("[abc]")); // true
System.out.println("x".matches("[abc]")); // false
System.out.println("ab".matches("[abc][abc]")); // true

// [^abc]
System.out.println("d".matches("[^abc]")); // true
System.out.println("a".matches("[^abc]")); // false

// [a-zA-Z]
System.out.println("B".matches("[a-zA-Z]")); // true
System.out.println("3".matches("[a-zA-Z]")); // false
System.out.println("3".matches("[a-zA-Z0-9]")); // true

// [a-z[m-p]]
System.out.println("n".matches("[a-z[m-p]]")); // true
System.out.println("z".matches("[a-z[m-p]]")); // false

// Interseção com &&
System.out.println("e".matches("[a-z&&[def]]")); // true
System.out.println("a".matches("[a-z&&[def]]")); // false
System.out.println("&".matches("[a-z&&[def]]")); // false

// Interseção negativa
System.out.println("a".matches("[a-z&&[^bc]]")); // true
System.out.println("b".matches("[a-z&&[^bc]]")); // false

Caracteres Predefinidos

Caracteres predefinidos oferecem atalhos para conjuntos comuns de caracteres. Note que em Java, a barra invertida deve ser escapada dentro de strings.

Expressão Descrição
. Qualquer caractere (exceto nova linha, por padrão).
\d Um dígito, equivalente a [0-9].
\D Não é um dígito, equivalente a [^0-9].
\s Um caractere de espaço em branco.
\S Não é um caractere de espaço em branco.
\w Um caractere de palavra: [a-zA-Z_0-9].
\W Não é um caractere de palavra: [^a-zA-Z_0-9].

Exemplos de Caracteres Predefinidos


// Ponto (.) corresponde a qualquer caractere único
System.out.println("X".matches(".")); // true
System.out.println("XY".matches(".")); // false
System.out.println("XY".matches("..")); // true

// \d para dígitos
System.out.println("9".matches("\\d")); // true
System.out.println("a".matches("\\d")); // false
System.out.println("12".matches("\\d")); // false

// \w para caracteres de palavra
System.out.println("_".matches("\\w")); // true
System.out.println("A".matches("\\w")); // true
System.out.println("!".matches("\\w")); // false
System.out.println("ab".matches("\\w")); // false

// \W para não caracteres de palavra
System.out.println("@".matches("\\W")); // true
System.out.println("a".matches("\\W")); // false

Quantificadores

Quantificadores controlam a frequência de ocorrência de um elemento na expressão.

Expressão Descrição
X? X, zero ou uma vez.
X* X, zero ou mais vezes.
X+ X, uma ou mais vezes.
X{n} X, exatamente n vezes.
X{n,} X, pelo menos n vezes.
X{n,m} X, entre n e m vezes.

Exemplos de Quantificadores


// \w{6,} exige pelo menos 6 caracteres de palavra
System.out.println("abc123".matches("\\w{6,}")); // true
System.out.println("abc12".matches("\\w{6,}")); // false

// \w{5} exige exatamente 5 caracteres de palavra
System.out.println("hello".matches("\\w{5}")); // true
System.out.println("hi".matches("\\w{5}")); // false

Tags: java Expressões Regulares Regex Validação de Strings Classes de Caracteres

Publicado em 6-2 06:29 por Thomas