Guia Completa de Expressões Regulares para Uso Profissional (Multilíngue e Multilinhas)

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.

タイトルとURLをコピーしました