1 个不稳定版本
0.1.0-alpha1 | 2022年8月24日 |
---|
#761 in 文本处理
70KB
1.5K SLoC
可读正则表达式
为人类设计的正则表达式。
为什么?
正则表达式很有用。但说真的,由于代码更多地被阅读而不是编写,正则表达式在详细模式下可能更容易理解。
readable-regex
crate 是一组工具,用于以详细的方式构建这些正则表达式。其目的是提高代码的可读性。
它构建在已经非常优秀的 regex
和 fancy-regex
crate 的基础上。
添加依赖项
将依赖项添加到您的 Cargo.toml
文件中
readable-regex = "0.1.0"
用法
可用的 API
主要的包装器是 ReadableRe
枚举。
有两种主要方式使用它来构建正则表达式,要么使用 枚举 本身
use readable_regex::ReadableRe;
let query = ReadableRe::Raw("<some regex expression>");
要么通过使用围绕它的函数包装器
use readable_regex::raw_regex;
let query = raw_regex("<some regex expression>");
还可以组合它们
use readable_regex::{digit, group};
use readable_regex::ReadableRe::*;
let query = group(digit() + Digit + digit());
println!("{}", query.to_string());
示例
如何构建一个简单的日期匹配(如 presets
特性下 datetime
模块中实现的那样)
use once_cell::sync::Lazy;
use readable_regex::*;
use readable_regex::ReadableRe::*;
/// Month day, `01`-`31`
pub const DAY: Lazy<ReadableRe> = Lazy::new(|| {
either([
Raw("0") + chars("1-9"),
chars("12") + chars("1-9"),
Raw("3") + chars("01"),
])
});
/// Month numeral, `01`-`12`
pub const MONTH: Lazy<ReadableRe> =
Lazy::new(|| either([Raw("0") + chars("1-9"), Raw("1") + chars("0-2")]));
/// Years from `1000` to `2999`
pub const YEAR: Lazy<ReadableRe> = Lazy::new(|| chars("12") + exactly(3, Digit));
/// Date Format `YYYY-MM-dd`
pub const DATE_Y_M_D: Lazy<ReadableRe> = Lazy::new(|| {
group(
group(YEAR.clone())
+ chars(r"-/.\\")
+ group(MONTH.clone())
+ chars(r"-/.\\")
+ group(DAY.clone()),
)
});
assert!(DATE_Y_M_D.compile().unwrap().is_match("2022/04/18"));
致谢
这个库深受 Python Humre
包的启发。
依赖项
~0–730KB
~12K SLoC