Curious TechieDev Toolbox
Todos os Guias/Processamento de Texto8 min read

O que é uma Expressão Regular (Regex)?

Motores de autômatos finitos, classes de caracteres, quantificadores, asserções lookahead e prevenção de vulnerabilidades ReDoS.

Principais Conclusões
  • Expressões regulares descrevem padrões formais de busca avaliados por motores de autômatos finitos (DFA/NFA).
  • Sua sintaxe combina Classes de Caracteres ([a-z]), Quantificadores (+, *) e Âncoras (^, $).
  • O Backtracking Catastrófico (ReDoS) ocorre quando quantificadores aninhados causam tempo de execução exponencial.
  • Lookarounds ((?=...), (?!...)) realizam testes de tamanho zero sem consumir caracteres do fluxo.

Expressões Regulares (Regex) fornecem uma notação algébrica compacta para localizar, validar e extrair padrões textuais complexos em strings, arquivos, logs e entradas de usuários.

1. Fundamentos da Gramática de Regex

No seu núcleo, padrões de regex avaliam caracteres literalmente (ex.: abc) ou por meio de metacaracteres que representam classes de caracteres:

  • \d: Qualquer dígito numérico (0-9).
  • \w: Qualquer caractere alfanumérico e sublinhado.
  • \s: Qualquer caractere em branco (espaço, tabulação, quebra de linha).
  • [a-z0-9]: Conjuntos customizados de caracteres.

2. Quantificadores Gananciosos vs Preguiçosos

Por padrão, quantificadores como * (0 ou mais) e + (1 ou mais) são gananciosos (greedy), casando o máximo possível de texto. Adicionar uma interrogação (*? ou +?) os torna preguiçosos (lazy), capturando o menor trecho viável.

3. Asserções de Lookahead e Lookbehind

Asserções de largura zero verificam condições sem consumir caracteres da string:

  • (?=...) Lookahead Positivo: Casa se o padrão for seguido pela expressão.
  • (?!...) Lookahead Negativo: Casa se o padrão NÃO for seguido pela expressão.
  • (?<=...) Lookbehind Positivo: Casa se o padrão for precedido pela expressão.
  • (?<!...) Lookbehind Negativo: Casa se o padrão NÃO for precedido pela expressão.

4. Prevenção de Retrocesso Catastrófico (ReDoS)

Quando um motor com backtracking avalia quantificadores aninhados ambíguos (ex.: ([a-zA-Z]+)+$) contra textos sem correspondência, o tempo de execução cresce exponencialmente (O(2^n)), travando processos no que conhecemos como ReDoS.