ToolActToolAct

Ferramenta de Teste Regex

Teste e depure expressões regulares com destaque de correspondência em tempo real e geração de código

Expressão Regular
//g
Flags
gglobal
iignore case
mmultiline
sdotAll
uunicode
Padrões Comuns
Texto de Teste
Resultados da Correspondência0 correspondências
Sem correspondências

O que é uma Expressão Regular?

A ferramenta Regex ajuda a escrever, testar e entender expressões regulares. Uma expressão regular descreve padrões de texto para busca, extração, validação e substituição, como strings parecidas com e-mail, campos de log, URLs, IDs, datas ou formatações repetidas. Um testador torna visíveis correspondências, grupos de captura, flags e casos de borda antes de usar o padrão em código, pipeline de dados ou validação de formulário. Regex é poderoso, mas fácil de superestimar: um padrão pode casar demais ou de menos, ficar lento com entradas grandes ou lidar mal com Unicode e regras locais. Para parsers complexos, HTML ou validação crítica, uma biblioteca dedicada costuma ser mais segura.

Como Usar

Como usar

  1. Insira seu padrão regex na caixa de entrada à esquerda
  2. Selecione as flags necessárias (por exemplo, g para global, i para maiúsculas/minúsculas)
  3. Insira o texto de teste no lado direito
  4. Veja os trechos correspondentes destacados e os detalhes

Dicas de Regex

  • Teste padrões com exemplos que correspondem e que não correspondem, para que expressões muito amplas sejam mais fáceis de detectar.
  • Cuidado com quantificadores aninhados em texto longo; alguns padrões podem ficar lentos devido a backtracking excessivo.

Casos de uso

Testar expressões regulares JavaScript ao vivoInsira um padrão, escolha as flags g, i, m, s e u, e teste contra texto de amostra com correspondências destacadas. Sintaxe regex inválida é capturada imediatamente, e correspondências globais de comprimento zero são tratadas sem travar o loop. O feedback em tempo real torna ajustes iterativos mais rápidos que executar um script no console ou reiniciar um editor toda vez que o padrão muda.
Inspecionar posições de correspondência e grupos nomeadosCada correspondência lista seu texto, offsets de início e fim e grupos de captura nomeados quando presentes. Isso é útil ao refinar padrões de extração para logs, validação de formulários, regras de importação ou scripts de limpeza de dados. O offset visível permite que o mesmo padrão seja inserido em um pipeline mais amplo que já rastreia posições de caracteres no arquivo de origem.
Transformar um padrão funcional em trechos de códigoAplique exemplos integrados para e-mails, URLs, IPs, datas, cores, texto chinês, números e espaços em branco, depois gere trechos copiáveis para JavaScript, Python, Java, PHP ou Go usando as flags selecionadas onde cada linguagem as suporta. Os trechos gerados incluem o padrão literal e o conjunto de flags, então o comportamento em runtime corresponde ao que foi testado na página.
Depurar backtracking catastrófico e correspondências descontroladasCole uma string longa ou adversarial no testador para expor quantificadores aninhados como (a+)+ ou .*foo.* que congelam o motor. Observe a contagem de correspondências e os offsets de cada uma; se a iteração travar ou a memória disparar, simplifique com grupos atômicos, quantificadores possessivos ou ajustando âncoras. Um bom padrão sobrevive à pior entrada sem crescimento exponencial.
Comparar quantificadores gulosos vs preguiçosos, lookbehind e \p{L}Use o testador para ver como quantificadores gulosos (.*) e preguiçosos (.*?) escolhem prefixos diferentes no mesmo texto, depois verifique o suporte a lookbehind (?<=) que está disponível em JavaScript e PCRE mas não em todo motor antigo. Ative a flag u para usar classes de propriedade Unicode como \p{L} (qualquer letra) e \p{Sc} (símbolo de moeda), para que padrões baseados em letras permaneçam corretos em scripts latinos, cirílicos e chineses.

Princípio técnico

O testador é conduzido pelo mecanismo ECMAScript RegExp definido na especificação da linguagem. Regex em ECMAScript é uma implementação NFA com backtracking: o motor tenta cada alternativa da esquerda para a direita e retrocede sempre que um quantificador falha, o que torna lookarounds e backreferences possíveis, mas também o que produz backtracking catastrófico em entradas adversariais. As seis flags reconhecidas são g (global), i (insensível a maiúsculas/minúsculas), m (multilinha, âncoras por linha), s (dotAll, '.' casa com nova linha), u (modo Unicode) e y (sticky, âncora em lastIndex). A semântica de correspondência muda drasticamente entre flags. Com /u, o motor trata o padrão como uma sequência de code points Unicode em vez de code units UTF-16, então pares de substituição casam como um caractere e classes de propriedade Unicode como \p{L} (qualquer letra), \p{Sc} (símbolo de moeda) e \p{Script=Han} se tornam disponíveis. Grupos de captura nomeados (?<name>...) e lookbehind (?<=...) fazem parte do ES2018 e estão presentes no Chromium 64+, Firefox 78+ e Safari 16.4+, mas funcionalidades exclusivas de PCRE como grupos atômicos (?>...) e quantificadores possessivos (a++) ainda não estão na especificação. O maior risco em produção é o ReDoS — um padrão como (a+)+b na entrada 'aaaaaaaaaaaaaaaa!' explora um número exponencial de caminhos porque dois quantificadores aninhados podem dividir a mesma sequência de caracteres de muitas maneiras. As mitigações são bem conhecidas: evite quantificadores aninhados sobre a mesma classe de caracteres, use âncoras ^ e $ sempre que possível, prefira grupos atômicos quando o motor os suporta, ou mude para um motor de tempo linear como o RE2 do Go (que troca backreferences e lookbehind por correspondência O(n) garantida). Para entrada não confiável destinada a validação no lado do servidor, RE2 ou um parser escrito à mão quase sempre é a opção mais segura.

  • Motor: ECMAScript RegExp é um NFA com backtracking, não um DFA; é isso que permite lookarounds e backreferences, mas também permite backtracking catastrófico.
  • Flags: g (global), i (insensível a maiúsculas/minúsculas), m (^/$ por linha), s (dotAll, '.' casa com \n), u (modo Unicode, consciente de surrogates), y (sticky, âncora em lastIndex).
  • Modo Unicode: /u desbloqueia correspondência por code point além de \p{L} (letra), \p{Sc} (moeda), \p{Script=Han}; sem /u, [a-zA-Z]+ perde toda palavra não latina.
  • Disponibilidade de sintaxe moderna: capturas nomeadas (?<n>...) e lookbehind (?<=...) presentes no Chromium 64+, Firefox 78+, Safari 16.4+; grupos atômicos (?>...) e quantificadores possessivos (a++) não estão no ECMAScript.
  • ReDoS: quantificadores aninhados sobre a mesma classe como (a+)+b explodem exponencialmente; aperte com âncoras, grupos atômicos ou migre para RE2 / re2-wasm para entrada não confiável.
  • Piso de complexidade: padrões literais com âncoras sobre um alfabeto fixo rodam em O(n); backreferences e lookarounds ilimitados levam o pior caso para exponencial, então faça benchmark com entrada adversarial antes de publicar.

Exemplos

Corresponder a um endereço de e-mail

Padrão: ^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}$
Flags:   gi

Entrada: contact: alice@example.com, bob_2024@mail.co.uk, invalid@.com
Correspondências: alice@example.com, bob_2024@mail.co.uk  (2 ocorrências)

Extrair endereços IPv4 de um log

Padrão: \b(?:\d{1,3}\.){3}\d{1,3}\b
Flags:   g

Entrada: 2026-06-15 ERROR client 192.168.1.42 connect failed (peer 10.0.0.1)
Correspondências: 192.168.1.42, 10.0.0.1

Capturar partes de uma data com grupos nomeados

Padrão: (?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2})
Flags:   g

Entrada: Sprint window: 2026-09-01 to 2026-09-15
Grupos:  {year:'2026', month:'09', day:'01'}, {year:'2026', month:'09', day:'15'}

Quantificador greedy vs lazy

Entrada: <b>hello</b> <i>world</i>

.*  (greedy) -> corresponde à linha inteira: <b>hello</b> <i>world</i>
.*? (lazy)   -> apenas a primeira correspondência: <b>hello</b>

Lazy normalmente é o que você quer ao extrair conteúdo entre tags.

Classe de letras com suporte a Unicode

Padrão: \p{L}+
Flags:   gu

Entrada: Hello, 北京! Café Москва
Correspondências: Hello, 北京, Café, Россия

Sem a flag u e \p{L}, [a-zA-Z]+ deixaria passar todas as palavras não latinas.

Perguntas frequentes

Qual variante de regex o testador usa?

O motor de regex do JavaScript (ECMAScript). É similar ao PCRE em recursos comuns, mas difere em casos extremos: sem quantificadores possessivos, sem recursão, suporte a lookbehind exige um navegador recente, grupos nomeados usam (?<nome>...). Para Python (re/regex), Java, .NET ou PCRE, o comportamento do mesmo padrão pode diferir — teste também no ambiente real.

Quais flags são suportadas?

g (global, encontra todas as correspondências), i (sem distinção de maiúsculas/minúsculas), m (multilinha, ^ e $ correspondem a limites de linha), s (dotall, . corresponde a quebra de linha), u (Unicode), y (sticky), d (hasIndices). Selecione-as na barra de toggles; a página mostra o que cada uma muda no seu texto de teste.

Por que meu padrão encontra menos resultados do que o esperado?

Sem a flag g, regex.exec retorna apenas uma correspondência. Sem m, ^ e $ correspondem apenas ao início/fim absoluto da entrada. Sem u, caracteres com surrogate pairs (emoji) correspondem como duas metades. A maioria dos problemas de 'por que isso não funciona' é falta de flags.

Como faço para corresponder emoji e caracteres CJK?

Use a flag u para habilitar o tratamento Unicode adequado. Use classes de caracteres \p{...} (\p{Letter}, \p{Script=Han}, \p{Emoji}) para correspondência por propriedade Unicode. Sem u, [a-zA-Z] não corresponderá a caracteres acentuados — expanda para [a-zA-ZÀ-ÿ] ou use \p{L}.

Posso gerar código a partir de um padrão?

A maioria das versões exporta o padrão como sintaxe JavaScript, Python, PHP, Ruby, Go ou Java com o escape adequado. Atenção: o mesmo padrão pode se comportar de forma diferente entre motores (padrões de greediness, comportamento de classes de caracteres, suporte a lookaround). Sempre teste na linguagem alvo.

Qual a diferença entre quantificadores greedy e lazy?

Greedy (* + ?) correspondem o máximo possível e depois fazem backtrack se necessário. Lazy (*? +? ??) correspondem o mínimo possível. Para 'extrair tudo entre A e B', .* greedy vai longe demais se houver vários Bs; .*? lazy para no primeiro B. Escolha lazy por padrão para extração de conteúdo interno.

Meu regex ou texto de teste é enviado para a internet?

Não. A correspondência roda no seu navegador usando o motor de regex nativo do JavaScript. Padrões e entradas não são transmitidos.