DevToolPal
PT

Testador de Regex PCRE

Teste expressões regulares compatíveis com PHP / Perl no motor PCRE2 de verdade: recursão, quantificadores possessivos, \K e mais.

Roda localmente, nada é enviado

Opções

Texto de teste

0 caracteres · 0 B

Resultado

O resultado aparece aqui

O que esta ferramenta faz

O testador de regex PCRE verifica uma expressão regular contra o seu texto usando a biblioteca PCRE2 de verdade, o mesmo motor usado pelo PHP, por ferramentas no estilo Perl e por muitos servidores web. As correspondências são destacadas, cada uma é listada com sua posição e grupos de captura, e uma substituição opcional mostra o resultado de uma troca no estilo preg_replace.

Testar no motor real faz diferença porque as expressões regulares PCRE e JavaScript diferem em detalhes pequenos, mas importantes. Um padrão que funciona em um testador baseado no navegador pode falhar ao compilar no PHP ou casar com outra coisa.

Como usar

  1. Digite o padrão sem delimitadores em Padrão PCRE (sem delimitadores).
  2. Cole o texto a pesquisar em Texto de teste.
  3. Ative os modificadores de que precisar: g para todas as correspondências (como preg_match_all), i, m, s, x, U e u para \w, \d e \b com suporte a Unicode.
  4. Se quiser, preencha Substituir por para ver a substituição. Use $1 ou ${1} para grupos numerados, ${name} para grupos nomeados e $0 para a correspondência inteira.

Padrões inválidos mostram a própria mensagem de erro do PCRE2 e a posição no padrão em que ele desistiu.

Exemplo

O padrão padrão \((?:[^()]++|(?R))*\) encontra parênteses balanceados. Ele casa com um par de parênteses contendo caracteres que não são parênteses ou, recursivamente, o padrão inteiro de novo. No texto de exemplo, ele encontra (a, g(b, c)) e ((x), y) e ignora o parêntese não fechado no final. Expressões regulares JavaScript não conseguem expressar isso.

Experimente (?<amount>\d+(?:\.\d+)?)\s+(?<cur>USD|EUR) com a substituição ${cur} $1 para inverter valores e códigos de moeda na segunda linha.

Recursos do PCRE que vale conhecer

  • Quantificadores possessivos (*+, ++, ?+) e grupos atômicos ((?>...)) nunca devolvem o que casaram, o que evita backtracking descontrolado.
  • \K reinicia o começo da correspondência, uma alternativa simples ao lookbehind.
  • Recursão com (?R), (?1) ou (?&name) casa com estruturas aninhadas.
  • Modificadores inline como (?i) mudam o comportamento em parte de um padrão.

Dicas

  • No PHP, envolva o padrão em delimitadores como /.../ ou ~...~ e escolha um que não apareça no padrão, para não precisar escapá-lo.
  • Ative u quando o seu texto tiver letras acentuadas ou caracteres CJK, para que \w case com eles.

Perguntas frequentes

› Qual a diferença para o testador de regex JavaScript?

Esta página roda o PCRE2, o motor por trás das funções preg_ do PHP, do Nginx, do Apache e de muitas outras ferramentas, compilado para WebAssembly. Ele suporta sintaxes que o JavaScript não tem, como recursão com (?R), quantificadores possessivos como a++, grupos atômicos, \K, grupos (?P<name>...) e os modificadores x e U.

› Preciso digitar os delimitadores, como /pattern/i?

Não. Digite apenas o padrão e ative os modificadores nas caixas de seleção. No PHP, `preg_match('/\d+/i', $s)` corresponde ao padrão `\d+` com Ignorar maiúsculas ativado.

› Por que recebi "match limit exceeded"?

Alguns padrões, como ^(a+)+$ em uma string longa sem correspondência, fazem backtracking um número exponencial de vezes. O testador para depois de cinco milhões de passos para a página continuar respondendo. O PHP tem uma proteção parecida, pcre.backtrack_limit, e preg_match retorna false quando ela é atingida.

› Meu texto é enviado?

Não. O módulo WebAssembly do PCRE2 é baixado uma vez e tudo roda no seu navegador.