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.