4 个版本 (2 个重大更新)
0.3.0 | 2023年4月1日 |
---|---|
0.2.0 | 2023年1月30日 |
0.1.1 | 2022年9月12日 |
0.1.0 | 2022年9月12日 |
#1035 在 文本处理
78KB
187 行
野花
野花是一个 Rust 库,它可以对字符串进行通配符匹配。它快速、易用、零拷贝,并且可以在 no_std
环境下运行。
使用方法
通配符匹配语法包含以下特殊字符
?
匹配单个字符。*
匹配零个或多个字符。\
转义这些特殊字符。
模式由一个可能包含这些特殊字符的 UTF-8 编码字符串构成。当创建模式时,给定的源字符串将被解析和编译成优化的内部形式。由于匹配之间不维护内部状态,因此建议您重复使用模式以获得最佳结果。
替代方案
wildmatch 是当时最接近的替代方案。遗憾的是,它明确不支持转义特殊字符,这对我来说是一个重大的限制,值得有替代方案。野花也执行某些优化,使其在匹配时性能更佳,在许多情况下,性能可以提高一个数量级(见 基准测试)。
存在几个其他用于模式匹配的 Crates,例如 regex(用于正则表达式)和 glob(用于 Unix shell 模式)。
基准测试
使用与 wildmatch 中找到的类似基准测试(源),我在我的机器上获得了以下结果
基准测试 | 野花 | wildmatch | regex | glob |
---|---|---|---|---|
编译/文本 | 362 纳秒 | 390 纳秒 | 131,770 微秒 | 2,041 纳秒 |
编译/复杂 | 218 纳秒 | 47 纳秒 | 84,236 微秒 | 165 纳秒 |
匹配/文本 | 7 纳秒 | 416 纳秒 | 415 纳秒 | 832 纳秒 |
匹配/复杂 | 104 纳秒 | 494 纳秒 | 409 纳秒 | 2,222 纳秒 |
在这个基准测试运行中,野花在简单和复杂匹配的情况下分别比 wildmatch 快 76 倍和 4 倍。它当然可以通过提高编译性能来进一步改进,但即使在单次使用的最坏情况下,它仍然优于 wildmatch。
致谢
感谢 Armin Becher 提供了 wildmatch 的基准测试代码和表格格式,以及感谢 Pixabay 的 Ilona Ilyés 提供了上方展示的猫图片的原版。
依赖项
~0.5–1MB
~20K SLoC