5 个版本
0.1.4 | 2020年7月9日 |
---|---|
0.1.3 | 2020年2月11日 |
0.1.2 | 2019年11月26日 |
0.1.1 | 2019年10月26日 |
0.1.0 | 2019年10月19日 |
#34 在 #streaming-parser
369 每月下载量
20KB
404 行
URL 定位器
此库提供了一种用于定位 URL 的流式解析器。
此库不会返回 URL 本身,而是只返回 URL 的长度和从当前解析位置偏移量。
长度和偏移量的计算遵循 Rust 标准库中 char
类型的示例,并基于 Unicode 标量值而不是图形符号。
用法
此 crate 可在 crates.io 上找到,您可以通过在项目的 Cargo.toml 中添加 urlocator
依赖项来使用它。
[dependencies]
urlocator = "0.1.4"
示例:URL 边界
通过跟踪当前解析器位置,可以在字符流中定位 URL 的边界。
use urlocator::{UrlLocator, UrlLocation};
// Boundaries: 10-v v-28
let input = "[example](https://example.org)";
let mut locator = UrlLocator::new();
let (mut start, mut end) = (0, 0);
for (i, c) in input.chars().enumerate() {
if let UrlLocation::Url(length, end_offset) = locator.advance(c) {
start = 1 + i - length as usize;
end = i - end_offset as usize;
}
}
assert_eq!(start, 10);
assert_eq!(end, 28);
示例:计数 URL
通过检查解析器的返回状态,可以确定 URL 被破坏的确切时间。利用此功能,可以统计流中的 URL 数量。
use urlocator::{UrlLocator, UrlLocation};
let input = "https://example.org/1 https://rust-lang.net.cn/二 https://example.com/Ⅲ";
let mut locator = UrlLocator::new();
let mut url_count = 0;
let mut reset = true;
for c in input.chars() {
match locator.advance(c) {
UrlLocation::Url(_, _) if reset => {
url_count += 1;
reset = false;
}
UrlLocation::Reset => reset = true,
_ => (),
}
}
assert_eq!(url_count, 3);