#regex #string #match #boilerplate #conditionally

strmatch

使用正则表达式在 Rust 中有条件地匹配字符串,无需过多样板代码

2 个版本

0.1.1 2023 年 2 月 1 日
0.1.0 2023 年 1 月 24 日

#1171 in 文本处理

MIT 许可证

6KB
82 代码行

strmatch

在 Rust 中使用正则表达式有条件地匹配字符串,无需过多样板代码。是的,这使用了 once_cell

使用方法

use strmatch::strmatch;

#[derive(PartialEq, Eq, Debug)]
enum StringType {
    Phone,
    Email,
    Others,
}

let email = "[email protected]";
let result = strmatch!(email => {
    r#"(\d{4})-(\d{2})-(\d{2})"# => StringType::Phone,
    r#"^([a-zA-Z0-9._%-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,6})*$"# => StringType::Email,
    _ => StringType::Others
});
assert_eq!(StringType::Email, result);

let result = strmatch!("[email protected]" => {
    // Phone
    r#"(\d{4})-(\d{2})-(\d{2})"# => {
        1 + 2
    },
    // Email
    r#"^([a-zA-Z0-9._%-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,6})*$"# => {
        3 + 4
    },
    _ => 5,
});
assert_eq!(7, result);

依赖项

~2.2–3MB
~54K SLoC