1 个不稳定版本
0.0.1 | 2021年4月1日 |
---|
#13 in #bird
9KB
78 行
bird-machine
在编译时编译您的正则表达式。
几乎还没有实现。请不要使用此版本。
示例:查找日期
use bird_machine::{bird_machine, Machine};
#[bird_machine(r"^\d{4}-\d{2}-\d{2}$")]
struct Date;
assert!(Date::is_match("2014-01-01"));
示例:迭代捕获组
use bird_machine::{bird_machine, Machine};
#[bird_machine(r"(\d{4})-(\d{2})-(\d{2})")]
struct Date<'a>(&'a str, &'a str, &'a str);
let input = "2012-03-14, 2013-01-01 and 2014-07-05";
let match_info = Date::captures_iter(input)
.map(|x: Date| format!("Month: {} Day: {} Year: {}", x.1, x.2, x.0));
let expected = [
"Month: 03 Day: 14 Year: 2012",
"Month: 01 Day: 01 Year: 2013",
"Month: 07 Day: 05 Year: 2014",
];
for (actual, expected) in match_info.zip(expected) {
assert_eq!(actual, expected);
}
示例:使用命名捕获组的替换
use bird_machine::{bird_machine, Machine};
#[bird_machine(r"(?P<y>\d{4})-(?P<m>\d{2})-(?P<d>\d{2})")]
struct Date<'a> {
y: &'a str,
m: &'a str,
d: &'a str,
}
let before = "2012-03-14, 2013-01-01 and 2014-07-05";
let after = Date::replace_all(before, "$m/$d/$y");
assert_eq!(after, "03/14/2012, 01/01/2013 and 07/05/2014");
示例:在编译时拒绝无效的正则表达式
use bird_machine::bird_machine;
// this will not compile
#[bird_machine(r"(oops i left this group open")]
struct Bad;
依赖项
~5MB
~104K SLoC