Skip to main content
CheckTown
Dev Tools

Regex Explainer: compreender expressoes regulares

Publicado 6 min de leitura
Neste artigo

O que sao expressoes regulares?

Expressoes regulares (regex) sao sequencias de caracteres que definem padroes de pesquisa. Sao usadas em praticamente todas as linguagens de programacao e editores de texto para encontrar, corresponder e manipular strings com base em regras em vez de texto exato. Um unico padrao regex pode corresponder a milhares de strings diferentes que compartilham uma estrutura comum.

A sintaxe regex pode parecer criptica a primeira vista, mas segue uma gramatica logica: caracteres literais correspondem a si mesmos, metacaracteres especiais como . (qualquer caractere), * (zero ou mais) e [] (classes de caracteres) definem regras de correspondencia flexiveis. Aprender a ler padroes regex desbloqueia poderosas capacidades de processamento de texto que de outra forma exigiriam dezenas de linhas de codigo.

Como funcionam os padroes regex

Um motor regex processa seu padrao caractere por caractere contra o texto de entrada, rastreando possiveis correspondencias e retrocedendo quando um caminho falha. Compreender alguns blocos de construcao basicos torna qualquer padrao legivel.

  • Classes de caracteres e quantificadores -- [a-z] corresponde a qualquer letra minuscula, \d corresponde a qualquer digito, + significa um ou mais, e {2,4} corresponde entre 2 e 4 repeticoes
  • Grupos e alternancia -- parenteses () criam grupos de captura para extrair subcorrespondencias, enquanto o operador pipe | fornece logica OU entre alternativas
  • Ancoras e lookaheads -- ^ e $ ancoram correspondencias no inicio e fim de uma linha, enquanto lookaheads (?=...) e lookbehinds (?<=...) verificam condicoes sem consumir caracteres

Experimente gratuitamente — sem cadastro

Explicar um padrao regex →

Quando usar regex

Expressoes regulares sao a ferramenta padrao para processamento de texto baseado em padroes no desenvolvimento de software.

  • Validacao de formularios -- verifique se a entrada do usuario corresponde a formatos esperados como enderecos de email, numeros de telefone ou codigos postais sem escrever logica de analise personalizada
  • Analise de logs -- extraia carimbos de data/hora, codigos de erro e enderecos IP de logs do servidor usando grupos de captura para estruturar dados de texto nao estruturados
  • Pesquisar e substituir -- realize transformacoes de texto em massa em editores de codigo ou scripts de build, como renomear variaveis ou reformatar strings de data em todo um projeto

Perguntas frequentes

Qual e a diferenca entre regex e padroes glob?

Padroes glob (como *.txt) sao padroes curinga mais simples usados principalmente para correspondencia de nomes de arquivo em shells. Regex e muito mais expressivo: suporta alternancia, quantificadores, lookaheads, referencias retroativas e classes de caracteres. Use globs para caminhos de arquivo e regex para correspondencia de conteudo textual.

O que e correspondencia greedy vs lazy?

Quantificadores greedy (*, +, {n,m}) correspondem ao maximo de texto possivel, enquanto quantificadores lazy (*?, +?, {n,m}?) correspondem ao minimo possivel. Por exemplo, dada a entrada <b>negrito</b>, o padrao greedy <.*> corresponde a toda a string, enquanto <.*?> corresponde apenas a <b>. Use quantificadores lazy quando precisar da correspondencia mais curta possivel.

Regex pode causar problemas de desempenho?

Sim. Certos padroes com quantificadores aninhados podem causar retrocesso catastrofico, onde o motor explora um numero exponencial de caminhos. Padroes como (a+)+ em uma longa string de a's podem congelar seu programa. Evite quantificadores aninhados em conjuntos de caracteres sobrepostos, use grupos atomicos quando disponivel e teste padroes contra entradas do pior caso.

Ferramentas relacionadas