Expressões Regulares em Java: do Básico ao Uso Avançado
Expressões regulares (regex) são uma ferramenta poderosa para trabalhar com texto, permitindo pesquisar, substituir e validar strings com padrões complexos. Em Java, o suporte a expressões regulares é implementado através do pacote java.util.regex, que fornece duas classes principais: Pattern (compila o padrão) e Matcher (executa operações de pesquisa/substituição).
Neste artigo, vamos explorar como usar expressões regulares em Java de forma eficiente, começando pela sintaxe básica até exemplos reais da prática de desenvolvimento.
1. Fundamentos da Sintaxe de Expressões Regulares em Java
Antes de passar ao código Java, é importante dominar os metacaracteres básicos das expressões regulares:
.— qualquer caractere único (exceto quebra de linha)\\d— qualquer dígito (0-9)\\w— letra, dígito ou sublinhado\\s— caractere de espaço em branco (espaço, tabulação, nova linha)*— 0 ou mais repetições do caractere anterior+— 1 ou mais repetições?— 0 ou 1 repetição (torna o caractere opcional)^— início da string$— final da string[...]— classe de caracteres (exemplo:[a-z]— todas as letras minúsculas)(...)— grupo de captura
Importante: Em Java, strings com expressões regulares exigem escape duplo. Por exemplo, para usar \\d, no código escrevemos "\\\\d". Isso ocorre porque a barra invertida é primeiro processada pelo compilador Java e depois passada para o motor regex.
2. Classes Pattern e Matcher — Base do Trabalho com Regex em Java
O esquema básico de trabalho com expressões regulares em Java consiste em três etapas:
- Criar um objeto
Patterncompilando a string do padrão - Criar um objeto
Matcherchamando o métodomatcher()na string a ser verificada - Executar operações — pesquisa, correspondência, substituição
Exemplo 1: Verificação de Correspondência da String Inteira
import java.util.regex.Pattern;import java.util.regex.Matcher;
public class RegexExample { public static void main(String[] args) { // Verificar se a string é um endereço de email válido String email = "user@example.com"; String emailPattern = "^[A-Za-z0-9+_.-]+@(.+)$"; Pattern pattern = Pattern.compile(emailPattern); Matcher matcher = pattern.matcher(email); if (matcher.matches()) { System.out.println("Email é válido"); } else { System.out.println("Email é inválido"); } }}O método matches() tenta corresponder o padrão à string inteira. Se precisar verificar se a string contém uma correspondência com o padrão (não necessariamente completa), usa-se o método find().
Exemplo 2: Buscar Todas as Ocorrências do Padrão na String
import java.util.regex.Pattern;import java.util.regex.Matcher;
public class FindExample { public static void main(String[] args) { String text = "Java 8, Java 11, Java 17 — são versões da linguagem Java"; String regex = "Java\\\\s+\\\\d+"; Pattern pattern = Pattern.compile(regex); Matcher matcher = pattern.matcher(text); while (matcher.find()) { System.out.println("Encontrado: " + matcher.group() + " (posição: " + matcher.start() + "-" + matcher.end() + ")"); } }}Resultado da execução:
Encontrado: Java 8 (posição: 0-6)Encontrado: Java 11 (posição: 8-15)