1 个不稳定版本

0.1.0 2022年4月17日

#143解析工具

Download history 15536/week @ 2024-03-14 13084/week @ 2024-03-21 9893/week @ 2024-03-28 8837/week @ 2024-04-04 8368/week @ 2024-04-11 9074/week @ 2024-04-18 10402/week @ 2024-04-25 9304/week @ 2024-05-02 13219/week @ 2024-05-09 11608/week @ 2024-05-16 11662/week @ 2024-05-23 11647/week @ 2024-05-30 10402/week @ 2024-06-06 9729/week @ 2024-06-13 9928/week @ 2024-06-20 11484/week @ 2024-06-27

43,771 每月下载量
用于 45 包 (8 个直接使用)

MIT/Apache

26KB
474

unscanny

Crates.io Documentation

无痛苦的字符串扫描。

[dependencies]
unscanny = "0.1"

基本上,如果你觉得用裸的 chars() 迭代器解决问题太痛苦,你就会想使用这个包。更广泛地说,unscanny 在以下情况下很有用

  • 你需要解析简单的扁平语法(日期、时间、自定义内容等)并希望有一个比简单的字符迭代器更方便使用的接口。
  • 你正在手动编写一个词法分析器。

Scanner 保持一个内部游标,允许你围绕它进行窥视,将其推进到字符或其他模式之后,并轻松地在前一个游标和当前游标之间截取子字符串。

示例

识别和解析一个简单的以逗号分隔的浮点数列表。

let mut s = Scanner::new(" +12 , -15.3, 14.3  ");
let mut nums = vec![];
while !s.done() {
    s.eat_whitespace();
    let start = s.cursor();
    s.eat_if(['+', '-']);
    s.eat_while(char::is_ascii_digit);
    s.eat_if('.');
    s.eat_while(char::is_ascii_digit);
    nums.push(s.from(start).parse::<f64>().unwrap());
    s.eat_whitespace();
    s.eat_if(',');
}
assert_eq!(nums, [12.0, -15.3, 14.3]);

安全性

此包内部使用不安全代码以获得更好的性能。然而,所有不安全代码都有文档说明其安全性,所有访问都在调试模式下进行检查,并且一切都经过测试。

许可证

此包根据 MIT 和 Apache 2.0 许可证双许可。

没有运行时依赖