#parser #regex #matching #generate #regular #expression #proc-macro

rematch

一个基于正则表达式匹配生成简单 FromStr 实现的过程宏

3 个版本

0.1.2 2022年6月14日
0.1.1 2022年6月14日
0.1.0 2022年6月14日

#304 in 解析器工具

MIT 许可证

9KB
200

rematch

一个基于正则表达式匹配生成简单 FromStr 实现的过程宏

示例

枚举使用

use rematch::rematch;

#[derive(Debug, PartialEq, Eq)]
#[rematch]
enum Test {
    #[rematch(r"a")]
    A,
    #[rematch(r"b (\d+)")]
    B(usize),
    #[rematch(r"c = (\d+)")]
    C { x: usize },
}

assert_eq!("a".parse::<Test>().unwrap(), Test::A);
assert_eq!("b 42".parse::<Test>().unwrap(), Test::B(42));
assert_eq!("c = 123".parse::<Test>().unwrap(), Test::C { x: 123 });

结构体使用

use rematch::rematch;

#[derive(Debug, PartialEq, Eq)]
#[rematch(r"a number (\d+) with some string ([abc]+)")]
struct Test {
    a: usize,
    s: String,
}

assert_eq!(
    "a number 42 with some string cabab"
        .parse::<Test>()
        .unwrap(),
    Test {
        a: 42,
        s: "cabab".to_owned(),
    }
);

依赖项

~3.5–5MB
~92K SLoC