Ferramenta de Teste Regex
Teste e depure expressões regulares com destaque de correspondência em tempo real e geração de código
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
- Insira seu padrão regex na caixa de entrada à esquerda
- Selecione as flags necessárias (por exemplo, g para global, i para maiúsculas/minúsculas)
- Insira o texto de teste no lado direito
- 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
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.1Capturar 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.
Ferramentas relacionadas
Editor Markdown
Editor Markdown online gratuito com visualização em tempo real, destaque de sintaxe e exportação HTML. Suporte a tabelas, blocos de código, diagramas, escreva mais eficientemente.
Ferramenta de Conversão Chinês
Conversor chinês online gratuito para conversão de Chinês Simplificado para Tradicional. Suporte a padrões da China continental, Taiwan, Hong Kong, gerencie diferenças de vocabulário regional.
Ferramenta de Deduplicação de Texto
Ferramenta gratuita de deduplicação de texto online com modos por linha, palavra, frase e parágrafo. Remova conteúdo duplicado com opções de maiúsculas e ordem.
Ferramenta de Inversão de String
Ferramenta de reversão de string online gratuita com modos de texto completo, palavra por palavra, linha por linha. Processamento de texto divertido para várias necessidades.
Analisador de Frequência de Caracteres
Ferramenta gratuita de análise de frequência de caracteres online. Conte a frequência de cada caractere com opções de maiúsculas e espaços.
Ferramenta de Conversão Pinyin
Conversor online de chinês para Pinyin. Suporta marcas de tom, números de tom e sem tom. Personalize separador e capitalização. Converta caracteres chineses para Pinyin instantaneamente.
