Laboratório de regex
Teste o padrão, veja cada ocorrência destacada, entenda o padrão pedaço por pedaço, saiba se ele pode travar e leve o código para outra linguagem.
Padrão e texto
Resultado
Texto com destaque
Ocorrências
Texto depois de substituir
O que o padrão diz
Levar para o código
O que é e para que serve
Uma expressão regular descreve um formato de texto: um CPF, uma data, um código de pedido. Este laboratório junta o que costuma ficar espalhado: teste com destaque, substituição com prévia, explicação do padrão em português, aviso de padrões que podem travar e conversão para outras linguagens. Tudo roda no seu navegador e o texto não é enviado a lugar nenhum.
Como usar
- Escreva o padrão sem as barras e informe as flags (
gpara todas as ocorrências). - Cole o texto e veja o destaque, a posição e os grupos de cada ocorrência, inclusive os nomeados.
- Em "Encontrar e substituir", use
$1ou$<nome>na substituição e confira a prévia. - Leia a explicação, de cima para baixo: cada linha traduz um pedaço do padrão e o recuo mostra os grupos.
- Escolha a linguagem de destino e copie o código. Leia os avisos abaixo dele.
Exemplo com resultado
O padrão (?<dia>\d{2})/(?<mes>\d{2})/(?<ano>\d{4}) no texto "Venceu em 05/11/2026" encontra 05/11/2026 na posição 11, com dia 05, mês 11 e ano 2026. Com a substituição $<ano>-$<mes>-$<dia>, o texto vira "Venceu em 2026-11-05".
Aviso de ReDoS e tempo limite
Alguns padrões levam tempo exponencial quando o texto não casa. O clássico é ^(a+)+$ com muitos "a" seguidos de um caractere diferente. A ferramenta faz duas coisas: uma análise simples do padrão, que acusa repetição dentro de repetição e alternâncias sobrepostas, e a execução do teste em um processo separado (Web Worker) com limite de 2 segundos. Se o limite estoura, o processo é encerrado e a página continua respondendo. A análise é uma heurística: pode alertar sem necessidade e pode deixar passar casos raros.
Cola de sintaxe
| Item | Significado |
|---|---|
^ $ | Início e fim do texto (ou da linha, com a flag m) |
\d \w \s | Dígito, letra sem acento/dígito/sublinhado e espaço em branco |
[abc] [^abc] [a-z] | Um caractere do conjunto, fora dele ou de um intervalo |
* + ? {2,4} | Zero ou mais, uma ou mais, opcional e quantidade exata ou faixa. Com ? depois, vira preguiçoso |
(...) (?:...) (?<nome>...) | Grupo com captura, sem captura e nomeado |
(?=...) (?!...) | Olhar à frente: exige ou proíbe, sem consumir |
(?<=...) (?<!...) | Olhar atrás: exige ou proíbe, sem consumir |
a|b \1 \k<nome> | Alternância e repetição do texto de um grupo |
\p{L} | Propriedade Unicode (exige a flag u) |
Diferenças entre linguagens
O padrão que você digita é de JavaScript. Ao converter, a ferramenta ajusta o que pode ser ajustado e avisa do resto. Os pontos mais comuns, conferidos nas documentações oficiais de cada linguagem: o grupo nomeado é (?P<nome>...) no Python; o Go (RE2) não tem lookahead, lookbehind nem referência a grupos; o lookbehind do Python exige largura fixa; no Java o nome do grupo aceita só letras e dígitos; o $ do JavaScript casa só no fim do texto, mas em Python, .NET, PHP e Java também casa antes de uma quebra de linha final; e no PHP, caracteres Unicode e \p{...} pedem o modificador u. Em strings, a barra invertida precisa de cuidado: Python usa texto bruto (r"..."), C# usa @"...", Java dobra a barra e Go usa crases.
Limites e o que não faz
- Não valida se um CPF, uma data ou um e-mail existe: só confere o formato.
- A explicação cobre a sintaxe do JavaScript. Recursos de outras linguagens (grupos atômicos, quantificadores possessivos) não são entendidos.
- A conversão não executa o código gerado: teste no ambiente de destino, principalmente com acentos e quebras de linha.
- O texto de teste é limitado a 200 mil caracteres e a tabela mostra até 500 ocorrências.
Perguntas frequentes
Por que o resultado muda entre linguagens?
Cada linguagem tem seu próprio mecanismo de regex. Eles concordam no básico e divergem em grupos nomeados, lookbehind, classes como \w e no significado de $. Por isso a conversão traz avisos.
O alerta de ReDoS significa que o padrão está errado?
Não. Significa que existe um texto capaz de deixá-lo muito lento. Em texto curto e confiável pode não importar; em dados vindos de usuários, vale reescrever com partes que não se sobrepõem.
O que fazer quando o teste é interrompido?
Reduza o texto, troque repetições aninhadas como (a+)+ por a+ e evite alternâncias que começam igual dentro de uma repetição. A página não trava, porque o teste roda separado.