Testador de Expressoes Regulares

Expressoes regulares (regex) sao padroes para correspondencia de texto. Esta ferramenta analisa a sintaxe de regex, explica os componentes do padrao e fornece uma area de teste para experimentar correspondencias com texto de exemplo. Suporta formatos de regex JavaScript, PCRE e Python.

Especificacoes

Casos de Uso Comuns

  • Depurar por que um regex nao esta correspondendo ao texto esperado
  • Aprender sintaxe de regex vendo explicacoes
  • Testar padroes antes de adicionar ao codigo
  • Validar padroes de entrada para campos de formulario
  • Extrair dados de texto estruturado (logs, CSV, HTML)

Funcionalidades

  • Detectar formato de regex (JavaScript /pattern/flags, PCRE #pattern#, Python r"pattern")
  • Explicar componentes do padrao em linguagem simples
  • Testar contra texto de exemplo com destaque de correspondencias
  • Modo de correspondencia unica ou encontrar todas as correspondencias
  • Exibir grupos de captura e seus conteudos
  • Exibicao de grupos de captura nomeados
  • Mostrar posicoes e indices das correspondencias
  • Exibicao do tempo de execucao do regex
  • Badges de recursos do padrao (ancoras, quantificadores, etc.)
  • Avisos de padrao
  • Biblioteca de padroes comuns (email, URL, telefone, etc.)

Exemplos

Padrao de Email

Experimente →

Um regex para correspondencia de enderecos de email.

/^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/i

Padrao de URL

Experimente →

Um regex para correspondencia de URLs HTTP/HTTPS.

/https?:\/\/[^\s]+/g

Padrao de Data

Experimente →

Um regex para datas YYYY-MM-DD com grupos de captura.

/(\d{4})-(\d{2})-(\d{2})/

Dicas

  • Use testadores online para depurar padroes complexos antes da producao.
  • Escape caracteres especiais (. ^ $ * + ? { } [ ] \ | ( )) com barra invertida.
  • Grupos de captura nomeados (?<name>...) tornam as correspondencias mais legiveis.
  • A flag g encontra todas as correspondencias; sem ela, apenas a primeira correspondencia e retornada.
  • Cuidado com quantificadores gulosos (* +); use nao-gulosos (*? +?) quando apropriado.

Entendendo Testador de Expressoes Regulares

Expressoes regulares (regex) sao uma linguagem de correspondencia de padroes usada em praticamente todas as linguagens de programacao, editores de texto e ferramentas de linha de comando. Um regex define um padrao de busca usando uma combinacao de caracteres literais e metacaracteres que correspondem a classes de strings. Sao essenciais para validacao de entrada, extracao de texto, operacoes de busca e substituicao e analise de logs.

A sintaxe principal inclui classes de caracteres ([a-z], \\d, \\w, \\s), quantificadores (*, +, ?, {n,m}), ancoras (^, $, \\b), alternacao (|) e agrupamento com parenteses. Grupos capturados extraem substrings correspondentes e habilitam retrorreferencias. Lookaheads (?=...) e lookbehinds (?<=...) correspondem posicoes sem consumir caracteres, permitindo assertivas complexas sobre o contexto circundante.

O regex JavaScript tem seu proprio dialeto com flags especificas: g (global), i (case-insensitive), m (multiline), s (dotAll), u (Unicode) e y (sticky). A flag u e cada vez mais importante para lidar corretamente com texto Unicode, pois sem ela os padroes podem nao corresponder corretamente a caracteres multibyte. Grupos de captura nomeados (?<name>...) melhoram a legibilidade em relacao a grupos numerados.

Tarefas comuns de regex incluem validacao de email, parsing de URL, extracao de dados de texto estruturado (arquivos de log, CSV) e substituicao de padroes em refatoracao de codigo. No entanto, regex tem limites — nao pode parsear estruturas aninhadas como HTML ou JSON (use um parser adequado), e padroes excessivamente complexos tornam-se ilegiveis e dificeis de manter. A piada "agora voce tem dois problemas" reflete desafios reais de manutencao com regex complexo.

HTML e uma linguagem livre de contexto com estruturas aninhadas que expressoes regulares fundamentalmente nao conseguem tratar. Um regex nao pode corresponder corretamente tags de abertura e fechamento com profundidade de aninhamento arbitraria. Casos simples podem parecer funcionar, mas falham em casos extremos envolvendo tags aninhadas, atributos contendo > ou comentarios. Para processamento de HTML, use um parser DOM como DOMParser no navegador, cheerio para Node.js ou BeautifulSoup para Python.

A diferenca entre .* (guloso) e .*? (preguicoso) e significativa para o comportamento de correspondencia. O guloso .* corresponde ao maximo de caracteres possivel e depois retrocede se necessario. O preguicoso .*? corresponde ao minimo de caracteres possivel. Em uma string como "<b>um</b><b>dois</b>", o padrao guloso <b>.*</b> corresponde a string inteira, enquanto o padrao preguicoso <b>.*?</b> corresponde apenas ao primeiro "<b>um</b>". Escolher o modo errado e uma das fontes mais comuns de comportamento inesperado em regex.

Em JavaScript, a flag u (/pattern/u) habilita correspondencia com suporte a Unicode. Sem ela, o metacaractere . nao corresponde a caracteres fora do Basic Multilingual Plane (como emoji), e \\w corresponde apenas a caracteres de palavra ASCII. A flag u faz quantificadores e classes de caracteres tratarem pares substitutos corretamente e habilita escapes de propriedade Unicode como \\p{Letter}. Lookaheads (?=...) e lookbehinds (?<=...) sao assertivas de largura zero que verificam padroes em uma posicao sem inclui-los na correspondencia. Lookahead positivo (?=...) afirma o que deve seguir, enquanto lookahead negativo (?!...) afirma o que nao deve seguir. Por exemplo, \\d+(?= dollars) corresponde a numeros seguidos por " dollars", mas captura apenas o numero em si. Lookbehinds funcionam da mesma forma, mas verificam o texto precedente.

← Voltar para todas as ferramentas