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.