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,}$/iPadrao 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.