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.
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 \D | Dígito 0–9 / não dígito |
| \w \W | Caractere de palavra (A–Z, a–z, 0–9, _) / o contrário |
| \s \S | Espaç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 \B | Limite 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|b | a 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 |
Como usar
- 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.
- 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.
- 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.
- 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.
- 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.