17个版本 (9个破坏性更新)
0.10.0 | 2024年5月29日 |
---|---|
0.9.0 | 2024年2月26日 |
0.7.1 | 2023年8月25日 |
0.6.0 | 2023年4月28日 |
0.1.3 | 2020年5月26日 |
#41 in 文本处理
537,989 每月下载量
在 315 个crate中使用了 (直接使用 210)
1.5MB
38K SLoC
regress - 使用EcmaScript语法的Rust REGex
oh no why
简介
regress是一个在Rust中实现的回溯正则表达式引擎,旨在JavaScript正则表达式语法。有关更多信息,请参阅crate文档。
它速度快,支持Unicode,依赖项少,测试套件大。它提供的保证比regex
crate少,但提供了更多的语法特性,例如后向引用和前瞻断言。
有趣工具
regress-tool
二进制文件可用于一些有趣的功能。
您可以使用dump-phases
命令行标志查看编译过程。
> cargo run 'x{3,4}' 'i' --dump-phases
您还可以运行一个小型基准测试,例如
> cargo run --release -- 'abcd' 'i' --bench ~/3200.txt
想要贡献吗?
这是我第一次编写的Rust程序,因此毫无疑问还有改进的空间。
还有很多东西还没有完成,也许你想贡献?
目前缺失的功能
- 一个用于替换字符串同时替换捕获组的API(例如使用
$1
) - 一个用于转义字符串以使其成为字面的API
- 实现
std::str::pattern::Pattern
缺失的性能优化
- 锚定匹配如
^abc
仍然执行字符串搜索。我们应该计算整个正则表达式是否锚定,并在锚定时优化匹配。 - 非贪婪循环如
.*?
会急切地计算它们的最大匹配。这不会影响正确性,但它们可能会匹配比预期更多的内容。 - 纯文本搜索应使用Boyer-Moore等。
- 存在许多向量化机会。
依赖关系
~1.5–2MB
~28K SLoC