Skip to main content
CheckTown
Ferramentas dev

Regex Explainer: compreender expressões regulares

Publicado 6 min de leitura
Neste artigo

O que sao expressões regulares?

Expressões regulares (regex) sao sequências de caracteres que definem padrões de pesquisa. Sao usadas em praticamente todas as linguagens de programação e editores de texto para encontrar, corresponder e manipular strings com base em regras em vez de texto exato. Um unico padrão 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 correspondência flexiveis. Aprender a ler padrões regex desbloqueia poderosas capacidades de processamento de texto que de outra forma exigiriam dezenas de linhas de código.

Como funcionam os padrões regex

Um motor regex processa seu padrão caractere por caractere contra o texto de entrada, rastreando possiveis correspondências e retrocedendo quando um caminho falha. Compreender alguns blocos de construção basicos torna qualquer padrão 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 repetições
  • 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 correspondências no inicio e fim de uma linha, enquanto lookaheads (?=...) e lookbehinds (?<=...) verificam condições sem consumir caracteres

Experimente gratuitamente — sem cadastro

Explicar um padrão regex →

Quando usar regex

Expressões regulares sao a ferramenta padrão para processamento de texto baseado em padrões no desenvolvimento de software.

  • Validação de formularios -- verifique se a entrada do usuário corresponde a formatos esperados como endereços de email, números de telefone ou codigos postais sem escrever logica de analise personalizada
  • Analise de logs -- extraia carimbos de data/hora, codigos de erro e endereços IP de logs do servidor usando grupos de captura para estruturar dados de texto não estruturados
  • Pesquisar e substituir -- realize transformações de texto em massa em editores de código ou scripts de build, como renomear variaveis ou reformatar strings de data em todo um projeto

Perguntas frequentes

Qual e a diferença entre regex e padrões glob?

Padrões glob (como *.txt) sao padrões curinga mais simples usados principalmente para correspondência de nomes de arquivo em shells. Regex e muito mais expressivo: suporta alternancia, quantificadores, lookaheads, referências retroativas e classes de caracteres. Use globs para caminhos de arquivo e regex para correspondência de conteudo textual.

O que e correspondência 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 padrão greedy <.*> corresponde a toda a string, enquanto <.*?> corresponde apenas a <b>. Use quantificadores lazy quando precisar da correspondência mais curta possivel.

Regex pode causar problemas de desempenho?

Sim. Certos padrões com quantificadores aninhados podem causar retrocesso catastrofico, onde o motor explora um número exponencial de caminhos. Padrões 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 padrões contra entradas do pior caso.

Ferramentas relacionadas