Java

Regex em Java: Pattern, Matcher e grupos nomeados

Em Java, o pacote java.util.regex separa o padrão compilado da execução sobre um texto. A maior armadilha para iniciantes é o escape duplo dentro de strings.

Ideia central: Regex valida ou encontra padrões de texto. Quando houver regra de negócio, cálculo ou semântica, use código complementar em vez de forçar tudo para dentro da expressão.
EM 30 SEGUNDOS

O que você precisa decidir antes do padrão

Em Java, Pattern representa a expressão compilada e Matcher executa buscas/capturas. Strings Java também adicionam uma camada de escape ao padrão.

Pense no problema antes de escrever Regex

Um padrão fica mais simples quando a regra já está clara. Para este caso, siga esta sequência:

  1. 01Compile Pattern quando o mesmo padrão será reutilizado.
  2. 02Escolha matches() para correspondência do texto inteiro e find() para procurar trechos.
  3. 03Use grupos nomeados em padrões maiores para deixar o código de extração mais legível.

Pattern e Matcher

Pattern pattern = Pattern.compile("^DEV-\\d{4}$");
Matcher matcher = pattern.matcher("DEV-2026");
boolean ok = matcher.matches();

matches() tenta casar a entrada inteira. Para procurar trechos, use find().

Por que Java usa \\d na string

A Regex precisa receber \d, mas a própria string Java interpreta a barra invertida. Por isso o código-fonte escreve "\\d".

find() para ocorrências

Pattern p = Pattern.compile("\\b\\d+\\b");
Matcher m = p.matcher("Pedidos 123 e 999");
while (m.find()) {
    System.out.println(m.group());
}

Grupos e grupos nomeados

Pattern p = Pattern.compile("(?<ddd>\\d{2})-(?<numero>\\d+)");
Matcher m = p.matcher("71-999991234");
if (m.matches()) {
    System.out.println(m.group("ddd"));
}

Grupos nomeados tornam o código mais fácil de manter do que depender apenas de índices.

Compile padrões reutilizados

Se um padrão é constante e usado muitas vezes, mantenha um static final Pattern em vez de recompilá-lo a cada chamada.

Como ler o padrão em partes

Em vez de memorizar a expressão inteira, leia cada bloco pela responsabilidade que ele cumpre:

Pattern.compile(...)compila a expressão e pode receber flags.
matcher.matches()tenta casar o input inteiro, diferente de procurar uma ocorrência qualquer.
matcher.find()avança pelas ocorrências encontradas no texto.
\\dna string Java representa o texto \d que será interpretado pelo motor de Regex.
QUANDO USAR

Onde Regex agrega valor aqui

Use Pattern/Matcher para validações, extrações e transformações textuais. Mantenha padrões importantes centralizados e testados.

ARMADILHAS

Erros comuns

  • Copiar uma Regex de um testador para uma string Java sem ajustar escapes.
  • Confundir matches() com find().
  • Compilar repetidamente o mesmo Pattern em loops de alto volume.
  • Usar grupos numerados difíceis de manter quando grupos nomeados seriam mais claros.

Teste e pratique

Use o Playground para experimentar o padrão com seus próprios dados e depois leve o conceito para as fases do jogo, onde os casos positivos e negativos são avaliados automaticamente.

Praticar no jogoAbrir Playground

Continue aprendendo

← Voltar ao hub de Regex