tomai
Entrar

Guia de Regex: padrões que vais realmente reutilizar

As expressões regulares comprimem toda uma linguagem de pesquisa numa só linha, por isso parecem crípticas até as peças encaixarem. Este guia cobre os 20 por cento da sintaxe que resolvem 80 por cento das tarefas: encontrar e-mails em texto colado, validar entradas, dividir logs e renomear ficheiros em massa.

1. Literais, ponto e classes de caracteres

A maioria dos caracteres representa-se a si mesma; o ponto representa qualquer caractere exceto uma quebra de linha. Os parênteses retos definem um conjunto — [0-9] aceita qualquer dígito, [^0-9] aceita tudo menos um dígito — enquanto atalhos como \d, \w e \s cobrem dígitos, caracteres de palavra e espaços. Prefere uma classe explícita a um ponto isolado sempre que souberes o que pertence ali.

2. Âncoras e quantificadores

^ ancora ao início e $ ao fim, por isso ^hi só encontra cadeias que começam por hi. Acrescenta + para uma vez ou mais, * para zero vezes ou mais e ? para opcional; um ? final depois de qualquer deles muda para correspondência preguiçosa, que para na primeira oportunidade em vez da última. Guloso contra preguiçoso é a fonte mais comum de resultados surpreendentes.

3. Grupos, alternâncias e lookarounds

Os parênteses agrupam e capturam — (cat|dog)s? encontra cat, cats, dog ou dogs — enquanto (?:…) agrupa sem capturar. Os lookaheads como \d+(?=px) verificam o que segue sem o consumir, por isso podes exigir um sufixo e deixá-lo no lugar para a correspondência seguinte. Os grupos nomeados documentam a intenção para quem ler o padrão a seguir.

4. As flags mudam tudo

As letras depois da barra final afinam o motor: g encontra todas as correspondências em vez da primeira, i ignora maiúsculas, m faz as âncoras atuar por linha, s deixa o ponto atravessar quebras de linha, u ativa Unicode completo e y fixa a correspondência a uma posição. Um conjunto errado de flags é uma razão frequente para um padrão com bom aspeto não devolver nada.

5. A armadilha do backtracking

Quantificadores aninhados como (a+)+ sobre uma cadeia longa sem correspondência podem lançar o motor por um número exponencial de caminhos e congelar o separador. Mantém as repetições simples, prefere reescritas possessivas ou grupos atómicos onde suportados, e testa os padrões suspeitos contra entradas hostis antes de publicar — cola-os em o nosso testador de regex, que destaca cada correspondência e cada grupo ao vivo no teu navegador.