Aprender expressões regulares: guia prático com exemplos
Expressões regulares assustam muitos desenvolvedores iniciantes, mas a realidade é que com os fundamentos certos e uma ferramenta interativa para praticar, qualquer pessoa consegue dominar regex em poucas horas de estudo. Este guia prático vai levá-lo do básico ao avançado com exemplos reais, explicações claras e o Testador de Regex da WikiPlus como ambiente de prática interativo e gratuito. Ao final, você terá confiança para criar regex para validação de formulários, extração de dados e processamento de texto em qualquer linguagem de programação.
Primeiros passos: encontrando texto literal
A forma mais simples de regex é uma correspondência literal: a regex 'gato' encontra exatamente a string 'gato' no texto. Isso pode parecer trivial, mas é a base. O poder começa quando você adiciona metacaracteres — caracteres especiais que têm significado especial em regex. O ponto (.) corresponde a qualquer caractere exceto quebra de linha. Então 'ga.o' corresponde a 'gato', 'galo', 'garo' ou qualquer combinação. A barra invertida (\) escapa metacaracteres para tratá-los como literais: \. corresponde a um ponto literal. Pratique no Testador de Regex da WikiPlus: use o texto 'gato no prato' e teste diferentes padrões para ver quais partes do texto são destacadas. Essa experimentação visual acelera muito o aprendizado.
Quantificadores: controlando repetições
Quantificadores definem quantas vezes um elemento pode aparecer. O asterisco (*) significa zero ou mais vezes: 'ca*t' corresponde a 'ct', 'cat', 'caat', 'caaat'. O mais (+) significa uma ou mais vezes: 'ca+t' corresponde a 'cat', 'caat' mas não 'ct'. A interrogação (?) significa zero ou uma vez, tornando o elemento opcional: 'colou?r' corresponde tanto a 'color' quanto a 'colour'. Chaves permitem controle preciso: {3} significa exatamente 3 vezes, {2,5} significa entre 2 e 5 vezes. Um erro comum é esquecer que quantificadores são 'gananciosos' por padrão — tentam corresponder ao máximo possível. Para torná-los 'preguiçosos' (mínimo possível), adicione ? após o quantificador: *? ou +?.
Grupos de captura: extraindo partes do texto
Grupos de captura são um dos recursos mais poderosos de regex. Quando você envolve parte de uma regex em parênteses, não está apenas agrupando — está capturando o texto correspondente para uso posterior. Por exemplo, a regex (\d{4})-(\d{2})-(\d{2}) aplicada ao texto '2026-05-12' captura o ano no grupo 1, mês no grupo 2 e dia no grupo 3. No Testador de Regex da WikiPlus, os grupos de captura são exibidos separadamente nos resultados, mostrando exatamente o que cada grupo capturou. Grupos não-capturantes, definidos com (?:...), agrupam sem capturar, úteis quando você precisa de agrupamento para quantificadores mas não quer os valores nos resultados. Grupos nomeados (?<nome>...) tornam o código mais legível ainda.
Lookahead e lookbehind: correspondências contextuais
Lookahead e lookbehind são recursos avançados que permitem criar regex que correspondem a texto baseado no que vem antes ou depois, sem incluir esse contexto na correspondência. Lookahead positivo (?=...) diz 'corresponda apenas se for seguido por'. Por exemplo, '\d+(?= reais)' encontra números que são seguidos por ' reais' mas não inclui ' reais' na correspondência. Lookbehind positivo (?<=...) é o equivalente para o que vem antes. Lookahead negativo (?!...) e lookbehind negativo (?<!...) fazem o oposto. Esses recursos são especialmente úteis para extração de dados onde o contexto importa, como extrair preços de um texto mas apenas quando são precedidos por 'R$'. Use o Testador de Regex para experimentar esses padrões com dados reais.
Perguntas frequentes
- Qual é a regex mais útil para validar endereços de email?
- Uma regex robusta para email é: ^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$. Ela valida o formato básico, mas validação completa de email segundo o RFC 5322 é extremamente complexa. Para produção, considere combinar regex básica com verificação de existência do domínio via DNS.
- Regex é igual em JavaScript, Python e outras linguagens?
- A sintaxe base é muito similar, mas há diferenças em recursos avançados. Python usa 're' módulo com sintaxe levemente diferente para grupos nomeados. JavaScript não suporta lookbehind em engines mais antigas. PHP usa PCRE. Teste na linguagem específica antes de usar em produção.
- Como evitar o problema de 'catastrophic backtracking' em regex?
- Backtracking catastrófico ocorre com regex ambíguas como (a+)+ aplicadas a strings longas sem correspondência, causando tempo exponencial. Para evitar: use quantificadores possessivos quando disponíveis, evite alternâncias redundantes, e teste com strings longas sem correspondência no Testador de Regex.