1 个不稳定版本
0.1.0 | 2022年4月17日 |
---|
#143 在 解析工具
43,771 每月下载量
用于 45 个 包 (8 个直接使用)
26KB
474 行
unscanny
无痛苦的字符串扫描。
[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 许可证双许可。