Expressões Regulares em Java: Guia Completo para Iniciantes
Expressões regulares (regex) são uma ferramenta poderosa para buscar, extrair e substituir texto com base em padrões. Em Java, o trabalho com expressões regulares é implementado através do pacote java.util.regex. Neste artigo, vamos abordar os fundamentos das expressões regulares em Java, aprender a usar as classes Pattern e Matcher, e também ver exemplos práticos.
1. Classes Principais para Trabalhar com Regex em Java
Em Java, duas classes principais são usadas para trabalhar com expressões regulares:
- Pattern — representa uma expressão regular compilada.
- Matcher — realiza operações de busca e correspondência com o texto.
Existe também o método conveniente String.matches(), que permite verificar rapidamente se uma string corresponde a um padrão, mas é menos flexível.
Exemplo 1: Correspondência Simples
import java.util.regex.*;
public class RegexExample1 { public static void main(String[] args) { String text = "Olá, mundo! Java é a melhor linguagem."; String pattern = "Java";
Pattern p = Pattern.compile(pattern); Matcher m = p.matcher(text);
if (m.find()) { System.out.println("Palavra encontrada: " + m.group()); } else { System.out.println("Nenhuma correspondência"); } }}Saída: Palavra encontrada: Java
2. Metacaracteres e Classes de Caracteres
Expressões regulares usam caracteres especiais (metacaracteres) para descrever padrões:
.— qualquer caractere (exceto quebra de linha)\\d— dígito [0-9]\\D— não dígito\\w— letra, dígito ou sublinhado [a-zA-Z0-9_]\\W— não palavra\\s— caractere de espaço em branco\\S— caractere não espaço em branco[abc]— um dos caracteres a, b ou c[^abc]— qualquer caractere exceto a, b, c
Exemplo 2: Busca por Dígitos no Texto
import java.util.regex.*;
public class RegexExample2 { public static void main(String[] args) { String text = "Meu número: 123-456-7890"; String pattern = "\\\\d+"; // um ou mais dígitos
Pattern p = Pattern.compile(pattern); Matcher m = p.matcher(text);
while (m.find()) { System.out.println("Número encontrado: " + m.group()); } }}Saída:
Número encontrado: 123Número encontrado: 456Número encontrado: 78903. Quantificadores e Limites
Quantificadores indicam quantas vezes um elemento do padrão deve se repetir:
*— 0 ou mais vezes+— 1 ou mais vezes?— 0 ou 1 vez{n}— exatamente n vezes{n,}— n ou mais vezes{n,m}— de n a m vezes
Limites ajudam a indicar onde o padrão deve estar:
^— início da string$— fim da string\\b— limite de palavra
Exemplo 3: Validação de Endereço de Email
import java.util.regex.*;
public class RegexExample3 { public static void main(String[] args) { String email = "user@example.com"; String pattern = "^[\\\\w.-]+@[\\\\w.-]+\\\\.\\\\w{2,}$";
boolean isValid = Pattern.matches(pattern, email); System.out.println("Email válido: " + isValid); }}Saída: Email válido: true
4. Grupos de Captura e Substituição de Texto
Grupos de captura permitem extrair par