Biblioteca de padrões Regex

Mais de 60 padrões regex prontos para uso. Busque, copie e teste online.

Sobre esta biblioteca

É uma coleção organizada e pesquisável de mais de 60 padrões de expressão regular comumente usados, agrupados por categoria. Cada padrão inclui uma descrição, a expressão em si e exemplos de correspondências. Clique em um padrão para copiá-lo, ou use o painel de teste rápido para validar um texto contra ele diretamente nesta página.

Tudo é executado no seu navegador · nenhum padrão ou texto de teste é enviado a lugar nenhum. Use estes padrões em JavaScript, Python, PHP, Java, Go ou qualquer linguagem que suporte expressões regulares. Para testes mais avançados com flags e grupos de captura, experimente nosso Testador e depurador de Regex.

Como funciona

  1. Navegue ou busque : navegue pelos padrões por categoria (validação, extração, formatação) ou busque por nome ou caso de uso.
  2. Pré-visualize o padrão : cada entrada exibe a regex, uma descrição do que ela captura, entradas de exemplo com correspondências e os limites.
  3. Teste com seus dados : insira sua própria string de teste para verificar se o padrão captura o que você espera.
  4. Copie para usar : copie o padrão regex no formato JavaScript, Python ou POSIX para o seu código.

Por que usar a biblioteca de regex ?

Escrever expressões regulares do zero consome tempo e é sujeito a erros. Os padrões frequentemente necessários para validar e-mails, casar URLs, extrair números de telefone, detectar cartões de crédito, analisar datas ou validar endereços IP têm soluções testadas, mas achar uma versão confiável exige buscar no Stack Overflow, avaliar sua correção e verificar os casos-limite. Esta biblioteca reúne padrões verificados com seus casos-limite documentados, suas limitações conhecidas e casos de teste concretos. É mais rápido do que escrevê-los por conta própria e mais confiável do que copiar e colar de fontes aleatórias da Internet sem teste.

Categorias de padrões

De onde vêm as expressões regulares

A ideia matemática de «conjunto regular» foi formalizada por Stephen Cole Kleene em 1951 no memorando de pesquisa da RAND Representation of Events in Nerve Nets and Finite Automata. O operador * nesta página ainda é chamado estrela de Kleene em sua homenagem. Ken Thompson transformou a teoria em algoritmo em seu artigo de junho de 1968 na Communications of the ACM, Programming Techniques: Regular Expression Search Algorithm, e entregou a primeira implementação de regex no editor QED na Bell Labs. Em 1973, o mesmo motor alimentava ed, depois grep (a expansão literal é «globally search for regular expression and print»), sed e awk. O Perl (1987) de Larry Wall e especialmente o Perl 5 (1994) adicionaram grupos nomeados, lookaround, quantificadores não-gananciosos e manipulação Unicode que se tornaram o dialeto de facto conhecido como PCRE, portado para C como biblioteca por Philip Hazel em 1997.

Variantes de motor e o que muda entre elas

Um padrão que roda limpamente em JavaScript pode falhar silenciosamente em Go e ser rejeitado totalmente em POSIX. As cinco variantes que um desenvolvedor provavelmente encontrará:

Retrocesso catastrófico e ReDoS

A maioria dos motores regex em linguagens principais (PCRE, Java, JS V8 / SpiderMonkey / JavaScriptCore, Python re, .NET) são motores de retrocesso. Quando um padrão com quantificadores aninhados como (a+)+ encontra uma entrada que quase coincide, o motor pode tentar um número exponencial de caminhos alternativos antes de desistir. Isso é retrocesso catastrófico, e é a base da classe de ataque ReDoS (Regular expression Denial of Service) catalogada pela OWASP.

Stack Overflow, 20 de julho de 2016: um padrão projetado para aparar espaços em branco no início e fim, aplicado a um corpo de pergunta contendo 20 000 caracteres de espaço consecutivos, levou 11 minutos de CPU por requisição e deixou o site inacessível por 34 minutos. O post-mortem no blog oficial Stack Status recomendou substituir as regex de aparamento pelo trim nativo de string.

Cloudflare, 2 de julho de 2019: uma regra WAF contendo o padrão de quantificador aninhado .*(?:.*=.*) foi implantada globalmente e consumiu 100% da CPU em cada servidor edge por 27 minutos, deixando offline grandes porções da internet pública. O post-mortem da Cloudflare em seu blog creditou a mudança para a crate regex de Rust (um motor baseado em RE2, tempo linear) por evitar a recorrência.

As lições defensivas: evitar quantificadores aninhados ((a+)+, (a*)*, (a|aa)+); evitar aparamentos estilo \s+$ em entradas controladas pelo atacante; preferir grupos atômicos (?>...) ou quantificadores possessivos a++ em PCRE; e para serviços de alto rendimento, considerar um motor baseado em RE2.

Email, URL, telefone, data, cartão de crédito: quando não usar regex

Email. A gramática completa da RFC 5322 (outubro de 2008) se compila em uma regex de aproximadamente 3 000 caracteres. A especificação HTML5 do W3C para validação de <input type="email"> usa uma regex muito mais curta «isso-parece-um-email» que é o ponto de partida certo para indicações do lado cliente. RFC 6531 (fevereiro de 2012) permite endereços não-ASCII como 用户@example.com, que uma regex apenas ASCII rejeitará incorretamente. O consenso da indústria desde a RFC 6532: não valide emails com regex, envie um email de verificação em vez disso.

URL. A RFC 3986 (janeiro de 2005) é a spec de sintaxe genérica de URI, mas o WHATWG URL Living Standard diverge deliberadamente dela para coincidir com o que os navegadores realmente aceitam. Use new URL("...") em JavaScript ou urllib.parse em Python em vez de uma regex para qualquer coisa além de uma verificação visual rápida.

Números de telefone. A Recomendação E.164 da UIT-T (revisão atual novembro de 2010) permite até 15 dígitos com um prefixo + opcional, mas as regras específicas de país variam enormemente. A biblioteca de código aberto do Google libphonenumber codifica as regras por país para cada território e é o único validador confiável entre países.

Datas. Uma regex como ^\d{4}-\d{2}-\d{2}$ corresponde ao formato de calendário ISO 8601-1:2019, mas também aceita 2026-02-31. A validade de data requer lógica de calendário, não correspondência de padrão; use Date.parse() ou uma biblioteca de datas.

Cartões de crédito. Uma regex pode corresponder ao comprimento dos dígitos e ao prefixo IIN (Visa começa com 4, Mastercard com 51-55 ou 2221-2720, Amex com 34 ou 37) mas não pode verificar a soma de verificação Luhn (Hans Peter Luhn, IBM, patente EUA 2 950 048 concedida em agosto de 1960). Luhn requer uma soma dígito por dígito módulo 10.

Maneiras comuns que os desenvolvedores usam esta biblioteca

Erros comuns

Mais perguntas frequentes

Por que alguns padrões usam (?:...) em vez de (...)?

(?:...) é um grupo não capturante: agrupa para repetição ou alternância mas não aloca um slot de retrorreferência. É mais rápido e evita poluir $1, $2 no array de resultados. Use (...) quando precisar extrair o texto capturado; use (?:...) apenas para agrupar.

Quais são os flags regex mais comuns?

i insensível a maiúsculas, g global (encontrar todos, comportamento específico JS), m multilinha (para que ^ e $ correspondam a limites de linha), s dotAll (para que . corresponda a quebras de linha, ES2018+), u Unicode (ES2015+), y sticky (ES2015+), d hasIndices (ES2022+), v classes de notação de conjunto (ES2024+). Combine como /pattern/gimsu.

Como faço correspondência com um caractere especial literal?

Escape-o com uma barra invertida. Os metacaracteres regex que precisam de escape para correspondência literal são: . ^ $ * + ? ( ) [ ] { } | \ /. Dentro de uma classe de caracteres [...] o conjunto de caracteres especiais é menor: apenas ] \ ^ - precisam de escape, dependendo da posição.

Posso usar os padrões desta biblioteca em scripts shell?

Sim, com ressalvas. grep usa POSIX BRE por padrão; grep -E usa ERE; grep -P usa PCRE em sistemas onde libpcre está ligada (GNU grep, macOS grep com Homebrew). Padrões usando lookaround, grupos nomeados ou escapes Unicode requerem grep -P ou ripgrep (que usa o motor RE2-based de Rust e rejeita lookaround).

Esses padrões são enviados a um servidor?

Não. Cada regex desta página, cada busca que você digita e cada string que testa no painel de teste rápido é processada no motor JavaScript do seu navegador. Nenhuma chamada de rede é feita. Os próprios dados de padrão são entregues como um arquivo JSON estático no bundle da página. Abra a aba Rede no DevTools para verificar.

Ferramentas relacionadas