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

Download history 50/week @ 2024-03-14 44/week @ 2024-03-21 82/week @ 2024-03-28 56/week @ 2024-04-04 96/week @ 2024-04-11 57/week @ 2024-04-18 38/week @ 2024-04-25 70/week @ 2024-05-02 91/week @ 2024-05-09 47/week @ 2024-05-16 55/week @ 2024-05-23 65/week @ 2024-05-30 57/week @ 2024-06-06 106/week @ 2024-06-13 136/week @ 2024-06-20 62/week @ 2024-06-27

369 每月下载量

MIT/Apache

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);

无运行时依赖项

功能