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
- Digite o padrão sem delimitadores em Padrão PCRE (sem delimitadores).
- Cole o texto a pesquisar em Texto de teste.
- 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,\de\bcom suporte a Unicode. - Se quiser, preencha Substituir por para ver a substituição. Use
$1ou${1}para grupos numerados,${name}para grupos nomeados e$0para 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. \Kreinicia 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
\wcase 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.