Ferramenta · Texto e código

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

Aguardando.

Resultado

Texto com destaque

Ocorrências

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

  1. Escreva o padrão sem as barras e informe as flags (g para todas as ocorrências).
  2. Cole o texto e veja o destaque, a posição e os grupos de cada ocorrência, inclusive os nomeados.
  3. Em "Encontrar e substituir", use $1 ou $<nome> na substituição e confira a prévia.
  4. Leia a explicação, de cima para baixo: cada linha traduz um pedaço do padrão e o recuo mostra os grupos.
  5. 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

ItemSignificado
^ $Início e fim do texto (ou da linha, com a flag m)
\d \w \sDí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

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.