Tópico dedicado ao INEMA REGEX, um GPT customizado para ensino e…
INEMA
causando “quase matches”. Solução: ancorar quando quiser validar a string inteira. * Greedy demais. Solução: quantificador não-guloso, ex.: .*? entre marcadores. * Falta de Unicode. Solução: ativar flag adequada ((?u) no PCRE/Python 3 já é default) e usar \p{L}.
Cheatsheet mínimo para lembrar⌗
- começo/fim: ^ \$
- fronteira: \b
- dígito/letra/espaço: \d \w \s
- negações: \D \W \S
- quantidade: * + ? {n} {n,} {n,m}
- grupos: ( ) (?: ) (?
) - alternância: |
- lookarounds: (?= ) (?! ) (?<= ) (?\<! )
Exercícios com resposta⌗
-
Pegar números com separador de milhar ponto e decimal vírgula Regex: \b\d{1,3}(?:.\d{3})*(?:,\d{2})?\b Ex.: 1.234,56 999 12.000
-
Validar placa Mercosul simples Regex: \b[A-Z]{3}\d[A-Z]\d{2}\b
-
Extrair tudo entre [INÍCIO] e [FIM] de forma não gulosa Regex: $INÍCIO$([\s\S]*?)$FIM$
-
Dividir CSV respeitando aspas Regex: /,(?=(?:[^"]"[^"]")[^"]\$)/
-
Pegar somente palavras com acento Regex: \b[\p{L}][À-ÖØ-öø-ÿ][\p{L}]\b
Lista final de tópicos com exemplos e respostas⌗
-
Âncoras e fronteiras Exemplo: validar string inteira numérica Regex: ^\d+\$ Resposta: casa para “12345”, não casa “12a”
-
Classes e faixas Exemplo: só vogais Regex: (?i)^[aeiou]+\$ Resposta: “AeiO” ok, “abc” não
-
Quantificadores e ganância Exemplo: pegar menor conteúdo entre aspas Regex: "(.*?)" Resposta: em Ele disse “oi” e “tchau”, captura “oi” e “tchau” separadamente
-
Grupos de captura e nomeados Exemplo: data dd/mm/aaaa Regex: (?
\d{2})/(? \d{2})/(?\d{4}) Resposta: groups d=“16” m=“08” a=“2025” -
Alternância Exemplo: cor aceita verm|azul|verde Regex: \b(vermelho|azul|verde)\b Resposta: casa apenas essas cores
-
Lookahead Exemplo: número antes de “kg” Regex: \d+(?=\s?kg\b) Resposta: “5 kg” retorna “5”
-
Lookbehind Exemplo: preço após “R\$ ” Regex: (?<=\bR\$\s)\d+(?:,\d{2})? Resposta: em “R\$ 19,90” retorna “19,90”
-
Substituição Exemplo: comprimir espaços Regex: \s{2,} → substituir por “ ” Resposta: “um dois” vira “um dois”
-
Flags Exemplo: case-insensitive Regex: (?i)\bbrasil\b Resposta: casa “Brasil”, “BRASIL”, “brasil”
-
Unicode Exemplo: só letras e espaços com acentos Regex: (?u)^[\p{L}\s]+\$ Resposta: “São Tomé” ok; “Rio-1” não
Vou demonstrar regex de forma prática, direta e com muitos exemplos. Se algo foi um typo de “regex”, já vou cobrir do básico ao avançado.
Resumo rápido⌗
Regex (expressões regulares) é uma mini-linguagem para buscar, validar e transformar texto. Com ela você consegue:
- validar formatos (e-mail, CPF, datas)
- extrair partes específicas (números, hashtags, grupos)
- substituir trechos com regras (mascarar dados, reformatar datas)
- dividir texto de forma inteligente
Conceitos fundamentais⌗
- Literais: texto simples. Ex.: pizza casa
- Metacaracteres comuns: . ^ \$ * + ? { } [ ] ( ) | \
- Âncoras: ^ (início), \$ (fim), \b (fronteira de palavra)
- Classes: [abc], faixas [0-9], atalhos \d \w \s e seus opostos \D \W \S
- Quantificadores: * (0+), + (1+), ? (0/1), {n}, {n,}, {n,m}
- Grupos: ( ... ) captura, (?: ... ) não captura, nomeados (?
...) - Alternância: a|b
- Lookaround: (?=...) lookahead positivo, (?!...) negativo, (?<=...) lookbehind positivo, (?\<!...) negativo
- Flags: i (case-insensitive), g (global JS), m (multilinha), s (dotall), u (Unicode)
Tabela mental de atalhos úteis⌗
- \d dígito, \w letra/número/_ , \s espaço/tab/linha
- \b fronteira de palavra, \B não-fronteira
- . qualquer caractere (sem \n, a menos de flag s)
- [^...] negação dentro da classe
Exemplos práticos (rápidos)⌗
-
CEP brasileiro simples Regex: \b\d{5}-?\d{3}\b
-
Telefone BR básico (com ou sem DDD, com 9) Regex: \b(?:$\d{2}$\s?)?(?:9\d{4}|\d{4})-?\d{4}\b
-
E-mail razoável Regex: \b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+.[A-Za-z]{2,}\b
-
Somente letras (inclui acentos com Unicode) Regex: (?u)^[\p{L}\s]+\$
-
Data dd/mm/aaaa com validação parcial Regex: \b(0?[1-9]|[12]\d|3[01])/(0?[1-9]|1[0-2])/\d{4}\b
-
Capturar número depois de “Pedido #” Regex: Pedido\s+#(\d+)
-
Extração de hashtags Regex: #([\p{L}0-9_]+)
-
Remover múltiplos espaços Regex: \s{2,} substitua por: espaço simples
-
Split por vírgula fora de aspas Regex: /,(?=(?:[^"]"[^"]")[^"]\$)/
-
Validar CPF só por formato (não dígitos verificadores) Regex: \b\d{3}.\d{3}.\d{3}-\d{2}\b
Demonstrações em código⌗
JavaScript
```// 1) Encontrar todos e-mails const txt = "Fale com ana@mail.com ou suporte@empresa.co"; const emails = txt.match(/\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+.[A-Za-z]{2,}\b/g);
// 2) Substituir datas de dd/mm/aaaa para aaaa-mm-dd
const s = "Hoje: 16/08/2025, amanhã: 17/08/2025";
const iso = s.replace(/\b(0?[1-9]|[12]\d|3[01])\/(0?[1-9]|1[0-2])\/(\d{4})\b/g, (m,d,mn,y) => ${y}-${mn.padStart(2,'0')}-${d.padStart(2,'0')});
// 3) Captura nomeado (em engines compatíveis com lookbehind e grupos nomeados)
const texto = "Pedido #34821 confirmado";
const m = texto.match(/Pedido\s+#(?
Python
```import re
1) CEP⌗
cep_re = re.compile(r"\b\d{5}-?\d{3}\b") print(cep_re.findall("CEP 90619-900 e 01310100"))
2) Extrair hashtags (Unicode)⌗
hashtags = re.findall(r"#([\w\p{L}]+)", "Post #Vida #AI #Inovação", flags=re.UNICODE) print(hashtags)
3) Substituir múltiplos espaços por um⌗
print(re.sub(r"\s{2,}", " ", "um dois três"))```
Lookarounds na prática⌗
-
Pegar números seguidos de “kg” sem capturar “kg” Regex: \b(\d+(?:,\d+)?) (?=kg\b)
-
Pegar palavras que não são seguidas de ponto final Regex: \b(\p{L}+)(?!.)\b
-
Capturar algo precedido por “R\$ ” Regex: (?<=\bR\$\s)\d+(?:,\d{2})?
Casos do mundo real⌗
Validar senha forte
- mínimo 8, uma maiúscula, uma minúscula, um dígito, um especial Regex: ^(?=.[a-z])(?=.[A-Z])(?=.\d)(?=.[^A-Za-z0-9]).{8,}\$
Mascarar CPF mantendo últimos 2 dígitos
- Encontrar: \b(\d{3}).(\d{3}).(\d{3})-(\d{2})\b
- Substituir: *.\$2.\$3- ou usar função para formatar conforme a política
Extrair domínios de URLs Regex: https?://([^/\s]+)
Quebrar em sentenças simples (pontos não dentro de números) Regex: (?<=\S[.!?])\s+(?=[A-ZÁ-Ú])
Erros comuns e como evitar⌗
- Usar . achando que pega tudo, mas falta a flag dotall (s). Solução: ativar s ou usar [\s\S].
- Esquecer âncoras ^ e \$,
INEMA REGEX - Formatação de RegEX
1