#通配符 #no-std

no-std wildflower

字符串通配符匹配

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文本处理

MIT 许可证

78KB
187

野花

workflow status crates.io docs.rs

(kitten trying to eat some some flowers that look suspicously like asterisks)

野花是一个 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