Visão Geral (O que é)
Este artigo é uma referência técnica completa para o uso de expressões regulares de forma prática e portável. Ele abrange sintaxe, manipulação de múltiplas linhas, técnicas de substituição, compatibilidade entre ferramentas e padrões sustentáveis para manutenção.
Objetivo (Por quê)
Expressões regulares são essenciais para validação, análise, transformação e extração de dados em textos. Presentes em praticamente todas as linguagens e plataformas, seu domínio permite automação eficaz, limpeza e análise de dados.
Parte 1: Sintaxe Básica
Padrão | Significado | Exemplo | Casos Correspondentes |
---|---|---|---|
. |
Qualquer caractere (exceto nova linha) | a.c |
abc , a-c |
* |
0 ou mais repetições do anterior | go*gle |
ggle , google |
+ |
1 ou mais repetições | go+gle |
gogle , google |
? |
0 ou 1 ocorrência | colou?r |
color , colour |
{n} |
Exatamente n vezes | a{3} |
aaa |
{n,m} |
De n até m vezes | a{2,4} |
aa , aaa , aaaa |
^ |
Início da linha | ^abc |
Linha começando com abc |
$ |
Fim da linha | abc$ |
Linha terminando com abc |
[] |
Um dos caracteres | [abc] |
a , b , c |
[^] |
Exceto os caracteres especificados | [^0-9] |
Qualquer não-dígito |
\d |
Dígito (0-9) | \d+ |
123 , 007 |
\D |
Não-dígito | \D+ |
abc , XYZ |
\w |
Caractere de palavra (letra, número, _) | \w+ |
abc_123 |
\W |
Não palavra | \W+ |
#@! , espaço, etc. |
\s |
Espaço (inclui tab, nova linha) | \s+ |
espaço, \n , \t |
\S |
Não espaço | \S+ |
abc , 123 |
` | ` | OU lógico | `foo |
() |
Agrupamento | (abc)+ |
abcabc |
\b |
Fronteira de palavra | \bregex\b |
Palavra exata "regex" |
Parte 2: Padrões Práticos (Suporte Multilíngue)
Finalidade | Padrão | Notas |
---|---|---|
Somente dígitos | ^\d+$ |
Apenas números |
Número decimal | ^\d+\.\d+$ |
Um ponto decimal |
Alfanumérico | ^[a-zA-Z0-9]+$ |
ID de usuário, etc. |
Email (simplificado) | ^[\w.-]+@[\w.-]+\.[a-zA-Z]{2,}$ |
Formato comum |
URL http/https | https?://[\w.-]+\.[a-zA-Z]{2,}(/[\w./?=&%-]*)? |
Inclui path e query |
Data ISO | \d{4}-\d{2}-\d{2} |
YYYY-MM-DD |
Telefone internacional | \+\d{1,3}[\s-]?\d{1,14} |
Ex: +55 11... |
Nome de usuário | ^[a-zA-Z0-9._-]{3,20}$ |
Redes sociais, etc. |
Senha forte (básica) | ^(?=.*[a-z])(?=.*[A-Z])(?=.*\d).{8,}$ |
Maiúscula, minúscula, número |
Parte 3: Multilinhas
🔹 Por que usar [\s\S]*?
O ponto (.
) não corresponde a quebras de linha em muitos motores. Use:
[\s\S]*?
Para capturar todos os caracteres, incluindo quebras de linha, de forma não gananciosa.
💡 Alternativa:
[\s\S\n]*?
, útil em ferramentas específicas como VSCode.
🔹 Exemplos comuns
Finalidade | Padrão | Notas |
---|---|---|
Bloco de texto genérico | [\s\S]*? |
Seguro para múltiplas linhas |
Bloco HTML <div> |
<div[\s\S]*?</div> |
Fecha corretamente |
Comentário HTML | <!--[\s\S]*?--> |
Bloco de comentário |
Código Markdown | "[\s\S]*? " |
Bloco de código cercado por “` |
Parte 4: Técnicas de Substituição
🔹 Referência de grupos
${1}
,${2}
(VSCode, .NET, Python)$1
,$2
(JavaScript, sed)
🔹 Exemplos
Tarefa | Padrão | Substituição |
---|---|---|
Inverter palavras | (\w+)\s+(\w+) |
${2} ${1} |
Envolver com <span> |
>([^<]+)< |
><span>${1}</span>< |
CSV para JSON | ^([^,]+),([^,]+),([^,]+)$ |
{ "a": "${1}", "b": "${2}", "c": "${3}" } |
Data: AAAA/MM/DD → AAAA-MM-DD |
(\d{4})/(\d{2})/(\d{2}) |
${1}-${2}-${3} |
CamelCase para snake_case | ([a-z])([A-Z]) |
${1}_${2} |
Parte 5: Compatibilidade por Ferramenta
Ferramenta | Multilinha | Não ganancioso | Substituição | Notas |
---|---|---|---|---|
VSCode | ✅ (painel buscar) | ✅ | ${1} |
[\s\S]*? ou [\s\S\n]*? recomendado |
JavaScript | ✅ (/s flag) |
✅ | $1 , $<name> |
Suporte a grupos nomeados |
Python (re ) |
✅ (re.DOTALL ) |
✅ | \g<1> , \1 |
Use r"" para strings brutas |
sed | ❌ | ❌ | \1 , \2 |
Funciona linha por linha |
grep/egrep | ❌ | ❌ | ❌ | Apenas busca, sem substituição |
Parte 6: Boas Práticas e Antipadrões
✅ Boas práticas
- Use sempre
[\s\S]*?
para multilinha - Evite
.*
— prefira não ganancioso - Use
(?:...)
quando não precisar capturar grupo - Nomeie grupos para clareza:
(?<ano>\d{4})
- Comente regexs complexas (
re.VERBOSE
no Python)
❌ Antipadrões
Padrão | Problema |
---|---|
.* |
Pode capturar mais do que o esperado |
[^a-z] |
Não suporta caracteres acentuados |
Regex para XML | Regex não é adequada para estruturas aninhadas |
.+ |
Pode capturar linhas em branco indesejadas |
Conclusão
Este guia é uma referência abrangente para o uso seguro e eficaz de expressões regulares em ambientes diversos.
Adote [\s\S]*?
como padrão para capturar blocos com quebras de linha e adapte os padrões à sintaxe específica de cada ferramenta.
Expressões bem projetadas são poderosas, reutilizáveis e facilitam a manutenção a longo prazo.