Sobre o projeto

RE2 é uma biblioteca de expressões regulares eficiente e fundamentada, originalmente desenvolvida no Google em 2006. Seu principal objetivo de design é a segurança, garantindo que possa lidar com expressões regulares de usuários não confiáveis sem risco de retrocesso catastrófico ou ataques de negação de serviço. Diferente de mecanismos tradicionais como PCRE, Perl ou o módulo re do Python, o RE2 garante que o tempo de correspondência seja linear em relação ao comprimento da string de entrada. Características principais incluem: - **Segurança**: O RE2 evita recursão e limita o uso de memória por meio de um orçamento configurável, falhando graciosamente se esgotado. Isso previne estouros de pilha e problemas de tempo exponencial comuns em mecanismos de retrocesso. - **Desempenho**: Embora nem sempre seja mais rápido que outros mecanismos em padrões simples devido à sobrecarga de avaliação paralela, fornece desempenho consistente em expressões complexas ao avaliar alternativas em paralelo, em vez de sequencialmente. - **Suporte de Sintaxe**: No modo Perl padrão, aceita a maioria dos operadores Perl, mas exclui aqueles que exigem retrocesso (por exemplo, backreferences, asserções de look-around). No modo POSIX, suporta sintaxe POSIX padrão (egrep) com correspondência mais à esquerda e mais longa. - **Tratamento Unicode**: O RE2 opera diretamente em pontos de código Unicode e não realiza normalização. Os usuários devem normalizar a entrada e os padrões antecipadamente, se necessário. A biblioteca é implementada em C++ e requer um compilador C++17 e a biblioteca Abseil. Pode ser construída usando GNU make, CMake ou Bazel. Embora nativa em C++, existem wrappers oficiais para Python (`google-re2`), e portes da comunidade estão disponíveis para Node.js, Java (RE2J), JavaScript (RE2JS), D, Erlang, OCaml, Perl, R, Ruby e WebAssembly. Outras linguagens como Go e Rust oferecem bibliotecas semelhantes seguindo os princípios do RE2, mas não compartilham código com ele.