Pular para o conteúdo
LeedyBox
Apoiar

Testador de RegEx, substituição e guia rápido

Teste expressões regulares com correspondências e grupos de captura destacados, pré-visualize substituições e copie o padrão como código para seis linguagens.

Flags
Correspondências: 0

Detalhes das correspondências e grupos de captura

Guia rápido

Clique em um padrão para carregá-lo com um texto de exemplo.

Referência de sintaxe

Caracteres

.Qualquer caractere exceto quebra de linha (com s: incluindo quebras de linha)
\d \DDígito 0–9 / não dígito
\w \WCaractere de palavra (A–Z, a–z, 0–9, _) / o contrário
\s \SEspaço em branco / não espaço em branco
[abc] [^abc]Um de a, b, c / qualquer um exceto a, b, c
[a-z]Um caractere no intervalo de a a z
\p{L}Uma letra de qualquer idioma (requer a flag u)
\. \\ \(Escapa um caractere especial para buscá-lo literalmente

Quantificadores

* + ?0 ou mais / 1 ou mais / 0 ou 1
{n} {n,} {n,m}Exatamente n / n ou mais / entre n e m
*? +? {n,m}?Preguiçoso: o mínimo de caracteres possível

Âncoras

^ $Início / fim do texto (de cada linha com m)
\b \BLimite de palavra / não limite de palavra

Grupos e lookaround

(…)Grupo de captura, usado como $1, $2 …
(?:…)Grupo sem captura
(?<name>…)Grupo nomeado, usado como $<name>
\1 \k<name>Referência anterior: o mesmo texto capturado por um grupo
a|ba ou b
(?=…) (?!…)Seguido de / não seguido de
(?<=…) (?<!…)Precedido de / não precedido de

Substituição

$1 $<name>Texto de um grupo numerado ou nomeado
$& $$A correspondência inteira / um $ literal

Revise os resultados antes de usá-los. A ferramenta é fornecida no estado em que se encontra, sem garantia, e os resultados podem estar incompletos ou incorretos. Termos de Serviço

Os padrões são testados com o mecanismo de expressões regulares do JavaScript. A sintaxe e o comportamento podem ser diferentes em outras linguagens e bancos de dados. Os padrões do guia rápido são exemplos práticos, não validadores completos.

Como usar

  1. Digite o padrão em "Expressão regular" sem as barras delimitadoras e as flags, e cole seu texto em "Texto de teste". As correspondências são destacadas em "Correspondências" e contadas enquanto você digita. Para começar com um exemplo, clique em um padrão do "Guia rápido"; isso substitui o padrão, as flags, o texto de teste e as configurações de substituição atuais.
  2. Marque as flags necessárias em "Flags"; passe o mouse sobre uma letra para ver o que ela faz. g e u vêm ativadas quando a página abre. Sem g, só a primeira correspondência é encontrada e só ela é substituída.
  3. Leia "Detalhes das correspondências e grupos de captura": cada correspondência é listada com a sua posição e o texto de cada grupo como $1, $2 e assim por diante, com o nome dos grupos nomeados. Ative a flag d para ver também onde cada grupo começa e termina.
  4. Para testar uma substituição, marque "Substituir correspondências por" e digite o texto de substituição, usando $1 ou $<name> para os grupos. O texto alterado aparece em "Resultado da substituição", e "Copiar resultado" o copia.
  5. Em "Gerador de código", escolha JavaScript, Python, Java, PHP, Go ou C# e clique em "Copiar código". O trecho inclui a substituição quando "Substituir correspondências por" está marcado. "Copiar como /padrão/flags" copia o padrão como um literal de regex do JavaScript.

Perguntas frequentes

O texto que eu testo é enviado para algum lugar?

Não. O padrão e o texto de teste são processados no seu navegador pelo próprio mecanismo de regex do JavaScript e não são enviados à LeedyBox. A ferramenta também não os salva.

Por que meu padrão corresponde a mais texto do que eu esperava?

Um padrão corresponde em qualquer lugar onde se encaixe, então \d{3} também encontra 123 dentro de 12345. Coloque \b nas duas pontas para palavras ou números inteiros, ou use ^ e $ para exigir que o texto inteiro corresponda (cada linha, com m ativada), como faz o padrão de senha do guia rápido. O \b depende dos caracteres de palavra de \w (A–Z, a–z, 0–9 e _) e trata letras como é ou 한 como caracteres que não são de palavra, então \bcafé\b não corresponde a café quando há um espaço logo depois. Quantificadores como + e * também são gananciosos: em <b>x</b>, o padrão <.+> corresponde à string inteira, enquanto <.+?> ou <[^>]+> para no primeiro >.

Por que um padrão que funciona em Python, PHP ou Java mostra um erro de RegEx aqui?

Esta página usa o mecanismo do JavaScript, que rejeita algumas sintaxes de outros mecanismos, como grupos nomeados (?P<name>…), flags inline como (?i) no início, grupos atômicos (?>…) e quantificadores possessivos como a++. Escreva grupos nomeados como (?<name>…) e use as caixas de seleção em "Flags" em vez de flags inline. Com a flag u, o JavaScript também é mais rígido com escapes: \# é um erro, assim como \- fora de colchetes, então remova a barra invertida ou desative u.

Por que \p{L} não corresponde a letras, ou um emoji conta como dois caracteres?

Classes de propriedades Unicode como \p{L} precisam da flag u; sem ela, o JavaScript lê \p{L} como o texto literal p{L}, e . corresponde a apenas metade de um caractere fora do Plano Multilíngue Básico, como muitos emojis. Carregar um padrão do guia rápido também carrega as flags dele, e todos, exceto "Caracteres especiais", deixam u desativada, então confira "Flags" antes de acrescentar esse tipo de sintaxe. Mesmo com u, . corresponde a um ponto de código, e alguns emojis, como bandeiras ou um joinha com tom de pele, são formados por dois ou mais. As posições nos detalhes das correspondências contam unidades de código UTF-16, como faz o JavaScript, então caracteres fora do Plano Multilíngue Básico ocupam duas posições mesmo com u.

Por que \n na substituição não insere uma quebra de linha?

A substituição segue as regras do replace() do JavaScript: só as sequências que começam com $ são especiais, então \n e \t são inseridos como uma barra invertida seguida de uma letra, e não como quebra de linha ou tabulação. O campo tem uma única linha, então não é possível digitar uma quebra de linha nele; acrescente-a no código gerado. Para apagar as correspondências, marque "Substituir correspondências por" e deixe o campo vazio, como faz o padrão "Remover tags HTML/XML" do guia rápido.

O que acontece se um padrão for muito lento ou encontrar um número muito grande de correspondências?

Quando o navegador permite Web Workers, a busca é feita em um worker em segundo plano e interrompida após 2 segundos, então um padrão com backtracking catastrófico, como (a+)+$ em uma longa sequência de letras a seguida de outro caractere, mostra uma mensagem em vez de travar a página. A contagem em "Correspondências" inclui todas as correspondências, mas só as primeiras 1.000 são destacadas e listadas nos detalhes.

Posso colar o código gerado no meu projeto do jeito que está?

Use-o como ponto de partida. O gerador escreve o padrão como um literal de regex no JavaScript e como uma string nas outras linguagens, reescreve os grupos nomeados e as referências de substituição quando a sintaxe é diferente, como (?P<name>…) e \g<1> no Python, converte as flags i, m e s e espera a sua entrada em uma variável chamada text. Se o padrão tiver aspas ou barras, confira se o trecho de código as escapa corretamente. Os mecanismos continuam diferentes: o pacote regexp do Go usa a sintaxe RE2, que não suporta lookaround nem referências anteriores, e o módulo re padrão do Python não suporta classes \p{…}, então teste o código com os seus próprios dados.