Toolypet
Voltar ao Blog
Dev

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

Toolypet Team

Development Team

8 min de leitura

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

PadraoDescricaoExemplo
.Qualquer caracterea.c -> "abc", "a1c"
*0 ou maisab*c -> "ac", "abc", "abbc"
+1 ou maisab+c -> "abc", "abbc"
?0 ou 1colou?r -> "color", "colour"
^Inicio da string^Hello
$Fim da stringworld$
\dDigito [0-9]\d{3} -> "123"
\wCaractere de palavra [a-zA-Z0-9_]\w+
\sCaractere 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

  1. Inserir padrao
  2. Inserir string de teste
  3. Ver correspondencias destacadas
  4. 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:

  1. Sintaxe basica: ., *, +, ?, [], ()
  2. Metacaracteres: \d, \w, \s, ^, $
  3. Quantificadores: {n}, {n,}, {n,m}
  4. Recursos avancados: Lookahead, Lookbehind, Grupos Nomeados

A pratica e a chave. Teste em tempo real no Regex Tester.


Ferramentas Relacionadas

FerramentaProposito
Regex TesterTeste e depuracao de Regex
JSON FormatterFormatacao de JSON
RegexExpressoes RegularesPattern MatchingDesenvolvimentoJavaScriptPython

Sobre o Autor

Toolypet Team

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.

Web DevelopmentCSS ToolsDeveloper ToolsSEOSecurity