Dominando Expressoes Regulares 2026 - Guia Completo de Padroes com Exemplos
Da validacao de email, URL e telefone a analise de texto complexo. Aprenda padroes regex praticos que voce pode usar imediatamente com exemplos de codigo funcionais.
Toolypet Team
Development Team
Dominando Expressoes Regulares 2026
"Expressoes regulares sao dificeis" - e verdade. Mas uma vez que voce as domina, pode reduzir o tempo de processamento de texto em 90%.
Este guia cobre os padroes regex mais utilizados na pratica com exemplos.
Fundamentos de Regex
Sintaxe Basica
| Padrao | Descricao | Exemplo |
|---|---|---|
. | Qualquer caractere | a.c -> "abc", "a1c" |
* | 0 ou mais | ab*c -> "ac", "abc", "abbc" |
+ | 1 ou mais | ab+c -> "abc", "abbc" |
? | 0 ou 1 | colou?r -> "color", "colour" |
^ | Inicio da string | ^Hello |
$ | Fim da string | world$ |
\d | Digito [0-9] | \d{3} -> "123" |
\w | Caractere de palavra [a-zA-Z0-9_] | \w+ |
\s | Caractere de espaco | \s+ |
Classes de Caracteres
[abc] - Um de a, b, c
[^abc] - Exceto a, b, c
[a-z] - De a ate z
[A-Z] - De A ate Z
[0-9] - De 0 ate 9
[a-zA-Z] - Todas as letras
Quantificadores
{n} - Exatamente n
{n,} - n ou mais
{n,m} - Entre n e m
* - 0 ou mais ({0,})
+ - 1 ou mais ({1,})
? - 0 ou 1 ({0,1})
Grupos e Captura
(abc) - Grupo de captura
(?:abc) - Grupo sem captura
(?<name>abc) - Grupo nomeado
\1 - Referencia ao primeiro grupo
Padroes Praticos: Validacao
Endereco de Email
// Padrao basico
const emailRegex = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/;
// Teste
emailRegex.test('user@example.com'); // true
emailRegex.test('invalid-email'); // false
Analise do Padrao:
^ - Inicio
[a-zA-Z0-9._%+-]+ - Parte local (1+ caracteres)
@ - Simbolo @
[a-zA-Z0-9.-]+ - Dominio (1+ caracteres)
\. - . (escapado)
[a-zA-Z]{2,} - TLD (2+ caracteres)
$ - Fim
URL
const urlRegex = /^(https?:\/\/)?([\da-z.-]+)\.([a-z.]{2,6})([/\w .-]*)*\/?$/;
// Teste
urlRegex.test('https://example.com'); // true
urlRegex.test('https://sub.example.com/path'); // true
urlRegex.test('invalid url'); // false
Numero de Telefone (Brasil)
// Celular brasileiro
const mobileRegex = /^(\+55)?(\d{2})9?\d{8}$/;
// Teste
mobileRegex.test('+5511912345678'); // true
mobileRegex.test('11912345678'); // true
Forca de Senha
// Minimo 8 caracteres, maiuscula/minuscula, numero, caractere especial
const strongPassword = /^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@$!%*?&])[A-Za-z\d@$!%*?&]{8,}$/;
// Analise do padrao
// (?=.*[a-z]) - Pelo menos 1 minuscula (lookahead)
// (?=.*[A-Z]) - Pelo menos 1 maiuscula
// (?=.*\d) - Pelo menos 1 digito
// (?=.*[@$!%*?&]) - Pelo menos 1 caractere especial
// {8,} - 8 ou mais caracteres
Numero de Cartao de Credito
// Visa
const visaRegex = /^4[0-9]{12}(?:[0-9]{3})?$/;
// MasterCard
const mastercardRegex = /^5[1-5][0-9]{14}$/;
// Todos os cartoes (com hifens opcionais)
const cardRegex = /^\d{4}[- ]?\d{4}[- ]?\d{4}[- ]?\d{4}$/;
Padroes Praticos: Extracao de Texto
Extracao de Conteudo de Tags HTML
const html = '<div class="title">Hello World</div>';
// Extrair conteudo da tag
const contentRegex = /<div[^>]*>(.*?)<\/div>/;
const match = html.match(contentRegex);
console.log(match[1]); // "Hello World"
// Remover todas as tags
const noTags = html.replace(/<[^>]*>/g, '');
console.log(noTags); // "Hello World"
Extrair Dominio de URL
const url = 'https://www.example.com/path/page.html';
const domainRegex = /^(?:https?:\/\/)?(?:www\.)?([^/]+)/;
const domain = url.match(domainRegex)[1];
console.log(domain); // "example.com"
Analise de Arquivo de Log
const logLine = '[2026-02-21 14:30:45] ERROR: Connection timeout at module.js:42';
const logRegex = /\[(\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2})\] (\w+): (.+) at (.+):(\d+)/;
const [, datetime, level, message, file, line] = logLine.match(logRegex);
console.log({
datetime, // "2026-02-21 14:30:45"
level, // "ERROR"
message, // "Connection timeout"
file, // "module.js"
line, // "42"
});
Analise de CSV (Separado por Virgulas)
const csvLine = 'John,"Doe, Jr.",30,"New York, NY"';
// Dividir por virgula (ignorar virgulas dentro de aspas)
const csvRegex = /(?:^|,)("(?:[^"]*(?:""[^"]*)*)"|[^,]*)/g;
const fields = [];
let match;
while ((match = csvRegex.exec(csvLine)) !== null) {
fields.push(match[1].replace(/^"|"$/g, '').replace(/""/g, '"'));
}
console.log(fields); // ["John", "Doe, Jr.", "30", "New York, NY"]
Padroes Praticos: Busca e Substituicao
Formatacao de Numero de Telefone
const phone = '11912345678';
// Adicionar espacos
const formatted = phone.replace(/(\d{2})(\d{5})(\d{4})/, '($1) $2-$3');
console.log(formatted); // "(11) 91234-5678"
Formatacao de Numeros
const amount = '1234567890';
// Separadores de milhar
const formatted = amount.replace(/\B(?=(\d{3})+(?!\d))/g, '.');
console.log(formatted); // "1.234.567.890"
Mascaramento
// Mascarar email
const email = 'username@example.com';
const masked = email.replace(/(.{2})(.*)(@.*)/, '$1***$3');
console.log(masked); // "us***@example.com"
// Mascarar telefone
const phone = '11-91234-5678';
const maskedPhone = phone.replace(/(\d{2})-(\d{5})-(\d{4})/, '$1-*****-$3');
console.log(maskedPhone); // "11-*****-5678"
Limpeza de Espacos em Branco
const text = ' Hello World ';
// Remover espacos no inicio/fim
const trimmed = text.replace(/^\s+|\s+$/g, '');
// Normalizar multiplos espacos para um
const normalized = text.replace(/\s+/g, ' ').trim();
console.log(normalized); // "Hello World"
Recursos Avancados
Lookahead
// Lookahead positivo: (?=...)
// Corresponder "foo" apenas se seguido de "bar"
const regex = /foo(?=bar)/;
'foobar'.match(regex); // ["foo"]
'foobaz'.match(regex); // null
// Lookahead negativo: (?!...)
// Corresponder "foo" apenas se NAO seguido de "bar"
const regex2 = /foo(?!bar)/;
'foobaz'.match(regex2); // ["foo"]
'foobar'.match(regex2); // null
Lookbehind
// Lookbehind positivo: (?<=...)
// Numeros precedidos por "$"
const priceRegex = /(?<=\$)\d+/g;
'$100 and $200'.match(priceRegex); // ["100", "200"]
// Lookbehind negativo: (?<!...)
// Numeros NAO precedidos por "$"
const nonPriceRegex = /(?<!\$)\d+/g;
'$100 and 200'.match(nonPriceRegex); // ["200"]
Grupos Nomeados
const dateRegex = /(?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2})/;
const match = '2026-02-21'.match(dateRegex);
console.log(match.groups.year); // "2026"
console.log(match.groups.month); // "02"
console.log(match.groups.day); // "21"
Non-Greedy (Nao Guloso)
const html = '<div>Hello</div><div>World</div>';
// Guloso (padrao): Corresponder o maximo possivel
/<div>.*<\/div>/.exec(html)[0];
// "<div>Hello</div><div>World</div>"
// Nao guloso: Corresponder o minimo possivel
/<div>.*?<\/div>/.exec(html)[0];
// "<div>Hello</div>"
Implementacao por Linguagem
JavaScript
// Metodos de criacao
const regex1 = /pattern/flags;
const regex2 = new RegExp('pattern', 'flags');
// Metodos
regex.test(str); // boolean
str.match(regex); // array ou null
str.replace(regex, replacement);
str.split(regex);
regex.exec(str); // info detalhada de correspondencia
// Flags
// g: Busca global
// i: Ignorar maiusculas/minusculas
// m: Multilinha
// s: dotAll (. corresponde a nova linha)
// u: Unicode
Python
import re
# Compilar
pattern = re.compile(r'pattern', re.IGNORECASE)
# Metodos
re.match(pattern, string) # Corresponder do inicio
re.search(pattern, string) # Buscar em toda a string
re.findall(pattern, string) # Lista de todas as correspondencias
re.sub(pattern, repl, string) # Substituir
# Exemplo
emails = re.findall(r'[\w.+-]+@[\w.-]+\.\w+', text)
cleaned = re.sub(r'\s+', ' ', text).strip()
Go
import "regexp"
// Compilar
re := regexp.MustCompile(`\d+`)
// Metodos
re.MatchString(s) // bool
re.FindString(s) // Primeira correspondencia
re.FindAllString(s, -1) // Todas as correspondencias
re.ReplaceAllString(s, r) // Substituir
// Exemplo
numbers := re.FindAllString("a1b2c3", -1)
// ["1", "2", "3"]
Otimizacao de Performance
Reutilizar Regex Compilada
// Lento: Compila toda vez
function validate(email) {
return /^[\w.+-]+@[\w.-]+\.\w+$/.test(email);
}
// Rapido: Compilar uma vez
const emailRegex = /^[\w.+-]+@[\w.-]+\.\w+$/;
function validate(email) {
return emailRegex.test(email);
}
Usar Grupos Sem Captura
// Captura desnecessaria
const regex = /(https?):\/\/(www\.)?(.+)/;
// Sem captura para grupos desnecessarios
const regex = /(?:https?):\/\/(?:www\.)?(.+)/;
Evitar Backtracking Catastrofico
// Perigoso: padrao (a+)+
const bad = /^(a+)+$/;
'aaaaaaaaaaaaaaaaaaaaaa!'.match(bad); // Muito lento
// Seguro: Reestruturar o padrao
const good = /^a+$/;
Dicas de Depuracao
Usando Regex Tester
- Inserir padrao
- Inserir string de teste
- Ver correspondencias destacadas
- Verificar grupos de captura
Validacao Passo a Passo
// Validar padroes complexos passo a passo
const parts = [
'^', // Inicio
'[a-zA-Z0-9._%+-]+', // Parte local
'@', // @
'[a-zA-Z0-9.-]+', // Dominio
'\\.', // .
'[a-zA-Z]{2,}', // TLD
'$', // Fim
];
const emailRegex = new RegExp(parts.join(''));
Perguntas Frequentes
Q1: Qual a diferenca entre . e \.?
R: . corresponde a qualquer caractere (coringa), \. corresponde a um ponto literal.
Q2: Qual a diferenca entre * e +?
R: * corresponde a 0 ou mais, + corresponde a 1 ou mais.
ab*c-> "ac", "abc", "abbc"ab+c-> "abc", "abbc" ("ac" nao corresponde)
Q3: Como ignoro maiusculas/minusculas?
R: Use a flag i.
- JavaScript:
/pattern/i - Python:
re.IGNORECASE
Q4: Como faco . corresponder a nova linha?
R: Use a flag s (dotAll).
- JavaScript:
/pattern/s - Python:
re.DOTALL
Q5: Quais caracteres precisam de escape?
R: \ ^ $ . | ? * + ( ) [ ] { } - escapar estes com \.
Conclusao
Essenciais de Regex:
- Sintaxe basica:
.,*,+,?,[],() - Metacaracteres:
\d,\w,\s,^,$ - Quantificadores:
{n},{n,},{n,m} - Recursos avancados: Lookahead, Lookbehind, Grupos Nomeados
A pratica e a chave. Teste em tempo real no Regex Tester.
Ferramentas Relacionadas
| Ferramenta | Proposito |
|---|---|
| Regex Tester | Teste e depuracao de Regex |
| JSON Formatter | Formatacao de JSON |
Sobre o Autor
Toolypet Team
Development Team
The Toolypet Team creates free, privacy-focused web tools for developers and designers. All tools run entirely in your browser with no data sent to servers.