#parse-url #parser #url-scheme #path-query #fragment #host #port

已下架 parser-on-rust

Rust语言URL解析器

2 个版本

0.1.3 2023年11月14日
0.1.2 2023年11月8日
0.1.1 2023年10月25日
0.1.0 2023年10月18日

#8 in #url-scheme

每月 25 下载

MIT/Apache

9KB
90 代码行

URL解析器项目

概述

本项目使用 pest 解析器生成器在 Rust 中实现了 URL 解析器。解析器旨在处理 URL 的各种组件,包括方案、主机、端口、路径、查询参数和片段。

安装

要在您的 Rust 项目中使用解析器,请将其添加到您的 Cargo.toml 文件中的依赖项

[dependencies]
parser_on_rust = "0.1.3"

在 crates.io 上选择当前版本: parser_on_rust

使用

作为库

首先,在您的 Rust 代码中导入库

use parser_on_rust::parse_url;

然后,您可以使用 parse_markdown 函数将 Markdown 文本转换为 HTML

fn main() {
    let url_string = "https://www.example.com/path?query=some";
    match parse_url(url_string) {
        Ok(parsed_url) => println!("Successfully parsed URL: {:?}", parsed_url),
        Err(err) => eprintln!("Error parsing URL: {}", err),
    }
}

功能

  • 灵活的 URL 解析:解析器支持广泛的 URL 格式,允许在提供的 URL 结构中具有灵活性。

  • 可选组件:路径、查询参数和片段等组件是可选的,提供了处理带有或不带有这些元素的 URL 的多功能性。

  • 错误处理:使用 Result 类型实现了适当的错误处理,确保了解析错误的优雅处理。

项目结构

项目结构如下

  • src/lib.rs: 包含 URL 解析器的实现,包括语法规则和解析逻辑。

  • src/main.rs: 一个简单的可执行文件,通过解析示例 URL 来演示解析器的使用。

  • tests/tests.rs: 对各种场景的单元测试,确保 URL 解析逻辑的正确性。

  • Cargo.toml: 项目配置文件,指定依赖项和其他元数据。

如何运行

要运行项目,执行以下命令

cargo run

这将执行 main.rs 文件,演示示例 URL 的解析。

单元测试

项目在 tests.rs 文件中包含了一套完整的单元测试。要运行测试,请使用以下命令

cargo test

依赖项

项目依赖于 pest crate 进行解析和 pest_derive 进行过程宏支持。请确保在 Cargo.toml 文件中正确指定这些依赖项。

[dependencies]
pest = "2.7.5"
pest_derive = "2.7.5"  

URL 语法

url = { scheme ~ "://" ~ host ~ (":" ~ port)? ~ (path ~ ("/" ~ file)? ~ ("?" ~ query)? ~ ("#" ~ fragment)?)? }
scheme = { identifier_with_optional_dot }
host = { identifier_with_optional_dot }
port = { number }
path = { "/" ~ identifier ~ ("/" ~ identifier)* }
query = { identifier ~ ("=" ~ identifier)* }
fragment = { identifier }
file = { identifier ~ ("." ~ identifier)* }

identifier = { ASCII_ALPHANUMERIC+ }
identifier_with_optional_dot = { identifier ~ ( "." ~ ASCII_ALPHANUMERIC+)* }
number = { DIGIT+ }

WHITESPACE = _{ " " | "\n" | "\t" }
ASCII_ALPHANUMERIC = _{ ASCII_ALPHABET | DIGIT }
ASCII_ALPHABET = _{ 'a'..'z' | 'A'..'Z' }
DIGIT = _{ '0'..'9' }

未来改进

  • 其他 URL 组件:根据需要扩展解析器以支持其他 URL 组件。

  • 用户输入处理:实现更健壮的用户输入处理机制,允许用户交互式地输入 URL。

  • 错误消息:增强错误消息,提供有关解析失败更详细的信息。

  • 命令行界面 (CLI): 该项目包含一个简单的命令行界面,允许用户输入要解析的 URL。

依赖项

~2.2–3MB
~59K SLoC