Expressões Regulares para Humanos: Um Guia Prático
Expressões regulares (regex) têm um problema de reputação. Parecem que alguém dormiu em cima do teclado: ^[\w.-]+@[\w-]+\.[\w.]+$. Elas aparecem em revisões de código, editores de texto, ferramentas de busca e validação de formulários. Desenvolvedores ou as amam ou as evitam completamente.
A verdade está no meio. Regex é genuinamente poderoso. Também é genuinamente confuso no início. Mas você não precisa dominar cada recurso obscuro para obter valor prático. Um punhado de padrões cobre a grande maioria dos casos de uso do mundo real.
O Que Regex Realmente Faz
Uma expressão regular é um padrão que descreve um conjunto de strings. Você o fornece a uma ferramenta de busca, e ela encontra toda string que corresponde ao padrão. Pense nisso como uma consulta de busca muito precisa.
Busca normal: encontrar exatamente "olá" Busca regex: encontrar qualquer coisa que se pareça com um endereço de e-mail, um número de telefone, uma data, uma URL ou qualquer outro padrão que você possa descrever.
Você sabia? Expressões regulares foram inventadas pelo matemático Stephen Kleene em 1956 como uma notação para descrever "linguagens regulares" na teoria formal de linguagens. Elas entraram na computação através dos primeiros editores de texto Unix nos anos 1960 e 1970.
Os Blocos de Construção
Caracteres Literais
O regex mais simples é apenas texto literal. O padrão hello corresponde à string "hello." Nada sofisticado.
O Ponto (.) — Qualquer Caractere Único
Um ponto corresponde a qualquer caractere único (exceto quebra de linha).
h.tcorresponde a "hat", "hit", "hot", "hut" e até "h3t"
Classes de Caracteres ([]) — Caracteres Específicos
Colchetes definem um conjunto de caracteres permitidos naquela posição.
[aeiou]corresponde a qualquer vogal única[0-9]corresponde a qualquer dígito[A-Za-z]corresponde a qualquer letra (maiúscula ou minúscula)[^0-9]corresponde a qualquer caractere que NÃO é um dígito (o^dentro dos colchetes significa "não")
Quantificadores — Quantos
Esses símbolos controlam a repetição:
| Símbolo | Significado | Exemplo | Corresponde |
|---|---|---|---|
* |
Zero ou mais | ab*c |
"ac", "abc", "abbc", "abbbc" |
+ |
Um ou mais | ab+c |
"abc", "abbc", "abbbc" (não "ac") |
? |
Zero ou um | colou?r |
"color" e "colour" |
{3} |
Exatamente 3 | a{3} |
"aaa" |
{2,4} |
Entre 2 e 4 | a{2,4} |
"aa", "aaa", "aaaa" |
Âncoras — Posição
^no início significa "começo da string"$no final significa "fim da string"^hello$corresponde apenas à string exata "hello", não "say hello" ou "hello world"
Classes Abreviadas
Classes de caracteres comuns têm atalhos:
| Abreviação | Equivalente | Significado |
|---|---|---|
\d |
[0-9] |
Qualquer dígito |
\w |
[A-Za-z0-9_] |
Qualquer caractere de "palavra" |
\s |
[ \t\n\r] |
Qualquer espaço em branco |
\D |
[^0-9] |
Qualquer não-dígito |
\W |
[^A-Za-z0-9_] |
Qualquer não-palavra |
\S |
[^ \t\n\r] |
Qualquer não-espaço |
Grupos (()) — Agrupamento e Captura
Parênteses agrupam partes de um padrão. Isso é útil para aplicar quantificadores a um grupo ou para extrair partes específicas de uma correspondência.
(ab)+corresponde a "ab", "abab", "ababab"(\d{3})-(\d{4})corresponde a "555-1234" e captura "555" e "1234" separadamente
O Pipe (|) — Ou
O pipe significa "ou."
cat|dogcorresponde a "cat" ou "dog"(jpg|png|gif)corresponde a qualquer uma dessas três extensões de imagem
Padrões Práticos Que Você Pode Usar Hoje
Corresponder um Endereço de E-mail (Simples)
[\w.-]+@[\w-]+\.[\w.]+
Decompondo:
[\w.-]+— um ou mais caracteres de palavra, pontos ou hifens (a parte local)@— arroba literal[\w-]+— um ou mais caracteres de palavra ou hifens (o domínio)\.— ponto literal (escapado porque.é um caractere especial)[\w.]+— um ou mais caracteres de palavra ou pontos (o TLD)
Atenção Validação de e-mail com regex é notoriamente difícil de fazer perfeitamente. O padrão simples acima cobre 99% dos endereços de e-mail do mundo real, mas não lida com todos os casos especiais definidos na especificação RFC. Para validação em produção, use a biblioteca de validação de e-mail da sua linguagem de programação.
Corresponder um Número de Telefone (Formato EUA)
\(?\d{3}\)?[-.\s]?\d{3}[-.\s]?\d{4}
Isso corresponde a:
- (555) 123-4567
- 555-123-4567
- 555.123.4567
- 555 123 4567
Corresponder uma URL
https?://[\w.-]+(/[\w./-]*)?
Isso corresponde a:
Corresponder uma Data (AAAA-MM-DD)
\d{4}-\d{2}-\d{2}
Isso corresponde a: 2026-03-23, 1999-12-31, etc.
Encontrar Palavras Duplicadas
\b(\w+)\s+\1\b
Isso corresponde a palavras repetidas como "the the" ou "is is." O \1 faz referência ao que foi capturado pelo primeiro grupo.
Corresponder um Endereço IPv4
\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}
Isso corresponde a padrões como 192.168.1.1 ou 10.0.0.255.
Dicas para Escrever Regex
1. Comece Simples, Depois Refine
Não tente escrever o regex perfeito na primeira tentativa. Comece com um padrão amplo, teste com seus dados e vá refinando.
2. Sempre Teste
Regex é fácil de errar. Um quantificador faltando ou um ponto não escapado pode mudar completamente o que corresponde. Sempre teste seu padrão contra dados do mundo real antes de usar em produção.
3. Escape Caracteres Especiais
Se você precisa corresponder um ponto literal, parêntese, colchete ou outro caractere especial, escape com uma barra invertida: \., \(, \[.
4. Use Comentários e Grupos Nomeados
Em padrões complexos, use grupos nomeados e comentários (onde suportado) para tornar o regex legível. Seu eu do futuro agradecerá.
5. Saiba Quando Não Usar Regex
Regex é a ferramenta errada para parsear HTML, XML, JSON ou qualquer estrutura aninhada. Use um parser adequado para isso.
Dica Teste e depure seus padrões regex em tempo real: Como Testar Padrões Regex. Cole seu padrão e dados de teste, e veja as correspondências destacadas instantaneamente.
Comece a testar regex agora:
Gratuito, feedback instantâneo e sem necessidade de cadastro.