O que é uma expressão regular? Uma explicação completa
Resposta rápida
Uma expressão regular é um padrão que descreve um conjunto de strings. Ele usa caracteres literais (correspondem a si mesmos) e metacaracteres (*, +, ?, ., ^, $, [], (), {}, |, \) com significados especiais. Regex é usado para validação, pesquisa, extração e substituição. Use nosso Regex Tester gratuito para testar padrões em texto em seu navegador.
Introdução
Uma expressão regular (regex ou regexp) é uma sequência de caracteres que define um padrão de pesquisa. O padrão é usado por algoritmos de pesquisa de strings para localizar, combinar ou substituir texto. As expressões regulares originaram-se na teoria da linguagem formal na década de 1950 (Stephen Kleene) e foram adotadas nas ferramentas de texto Unix (grep, sed, awk) na década de 1970. Hoje, o regex está integrado em praticamente todas as linguagens de programação e editores de texto. Regex é poderoso – pode validar formatos de e-mail, extrair dados de logs e encontrar padrões complexos – mas a sintaxe é densa e notoriamente difícil de ler.
Passo a passo
-
Entenda literais e metacaracteres
Caracteres literais (a, b, 1, @) correspondem entre si. Metacaracteres têm significados especiais: . corresponde a qualquer caractere, * significa zero ou mais, + significa um ou mais, ? significa zero ou um, ^ corresponde ao início, $ corresponde ao fim.
-
Aprenda classes de personagens
Colchetes [] definem uma classe de caracteres - [aeiou] corresponde a qualquer vogal, [0-9] corresponde a qualquer dígito, [^0-9] corresponde a qualquer não dígito. Classes abreviadas: \d (dígito), \w (caractere de palavra), \s (espaço em branco) e suas negações em maiúsculas.
-
Use quantificadores
Os quantificadores especificam quantas vezes um padrão se repete: * (0+), + (1+), ? (0 ou 1), {n} (exatamente n), {n,} (n+), {n,m} (n a m). Ganancioso por padrão; adicionar ? para correspondência lenta (por exemplo, *?).
-
Grupo e âncora
Parênteses () criam grupos de captura. Alternância | corresponde a qualquer um dos lados (gato|cachorro). As âncoras ^ e $ correspondem ao início e ao fim da string. Use-os para construir padrões complexos a partir de padrões mais simples.
Exemplos
Combine um padrão semelhante ao de e-mail
Entrada: Pattern: [a-z]+@[a-z]+\.[a-z]+
Saída: Correspondências: [email protected], [email protected]
Corresponder a um formato de número de telefone
Entrada: Pattern: \d{3}-\d{3}-\d{4}
Saída: Matches: 555-123-4567
Extraia pares de valores-chave
Entrada: Pattern: (\w+)=(\w+)
Saída: Matches 'key=value' with group 1 as key, group 2 as value
Problemas comuns
- A correspondência gananciosa consome demais —.* corresponde o máximo possível. Usar .*? para correspondência preguiçosa para encontrar a correspondência mais curta.
- Esquecer de escapar dos caracteres especiais —., *, +, ?, etc. Use \ para combiná-los literalmente (por exemplo, \. corresponde a um ponto literal).
- Retrocesso catastrófico — padrões com quantificadores aninhados (por exemplo, (a+)+) podem levar um tempo exponencial em certas entradas, causando ataques ReDoS.
- Correspondência excessiva —sem âncoras (^ e $), um padrão corresponde a qualquer lugar. Use ^...$ para corresponder a string inteira.
Dicas
- Comece de forma simples e adicione complexidade de forma incremental – depurar uma regex complexa de uma só vez é muito difícil.
- Use um testador de regex para experimentar padrões em texto de amostra — veja as correspondências destacadas em tempo real.
- Comente expressões regulares complexas usando o modo estendido (sinalizador /x em alguns mecanismos) ou divida-as em partes nomeadas.
- Use nosso Regex Tester para testar padrões instantaneamente em seu navegador - sem inscrição, totalmente privado.