这个项目能做什么
RE2是一个高效且原则性的正则表达式库,最初于2006年在Google开发。其主要设计目标是安全性,确保能够处理来自不受信任用户的正则表达式,而不会出现灾难性回溯或拒绝服务攻击的风险。与PCRE、Perl或Python的re模块等传统引擎不同,RE2保证匹配时间与输入字符串长度呈线性关系。
关键特性包括:
- **安全性**:RE2避免递归,并通过可配置的预算限制内存使用,若耗尽则优雅失败。这防止了回溯引擎中常见的栈溢出和指数级运行时问题。
- **性能**:虽然由于并行评估开销,在简单模式上不一定总是比其他引擎快,但在复杂表达式上提供一致的性能,通过并行而非顺序评估备选方案。
- **语法支持**:在默认的Perl模式下,接受大多数Perl运算符,但排除需要回溯的(如反向引用、环视断言)。在POSIX模式下,支持标准POSIX(egrep)语法,采用最左最长匹配。
- **Unicode处理**:RE2直接操作Unicode码点,不进行规范化。用户需事先规范化输入和模式(如需要)。
该库用C++实现,需要C++17编译器和Abseil库。可使用GNU make、CMake或Bazel构建。虽然原生为C++,但有官方Python包装(google-re2),社区移植版可用于Node.js、Java(RE2J)、JavaScript(RE2JS)、D、Erlang、OCaml、Perl、R、Ruby和WebAssembly。其他语言如Go和Rust提供遵循RE2原则的类似库,但不共享其代码。
评论
0 评分人数达到10人后显示
登录后参与讨论。