1 个不稳定版本
0.1.0 | 2021年4月29日 |
---|
#2042 在 编码
20KB
362 行
De-Regex
本包包含一个库,该库可以根据正则表达式和 serde 将字符串反序列化到结构体。
示例
use serde::Deserialize;
#[derive(Deserialize)]
struct Dimensions {
width: u32,
height: u32
}
let pattern = r"^(?P<width>\d+)x(?P<height>\d+)$";
let input = "800x600";
let dim: Dimensions = de_regex::from_str(input, pattern).unwrap();
assert_eq!(dim.width, 800);
assert_eq!(dim.height, 600);
许可证
本项目采用以下任一许可证:
- Apache License,版本 2.0,(LICENSE-APACHE 或 https://www.apache.org/licenses/LICENSE-2.0)
- MIT 许可证 (LICENSE-MIT 或 https://opensource.org/licenses/MIT)
贡献
除非您明确声明,否则根据 Apache-2.0 许可证定义,您有意提交以包含在 serde_urlencoded 中的任何贡献,应按上述方式双重许可,不附加任何额外条款或条件。
lib.rs
:
De-Regex
本包包含一个库,该库可以根据正则表达式和 serde 将字符串反序列化到结构体。
示例:将图像尺寸解析到结构体
use serde::Deserialize;
#[derive(Deserialize)]
struct Dimension {
width: u32,
height: u32
}
let pattern = r"^(?P<width>\d+)x(?P<height>\d+)$";
let input = "800x600";
let dim: Dimension = de_regex::from_str(input, pattern)?;
assert_eq!(dim.width, 800);
assert_eq!(dim.height, 600);
支持的数据类型
以下数据类型可以用作结构体字段。
-
bool:支持值为
true
或false
,不区分大小写
示例模式:^(?P<group_name>(?i)(true|false))$
-
u8, u16, u32, u64:可选的带有前缀
+
的十进制值
示例模式:^(?P<group_name>\+?\d+)$
-
i8, i16, i32, i64:可选的带有前缀
+
的十进制值
示例模式:^(?P<group_name>[-+]?\d+)$
-
f32, f64:有关有效语法的说明,请参阅 f32/f64 的 FromStr 实现
简单的十进制浮点数的示例模式:^(?P<group_name>[-+]?\d+(\.\d*)?)$
-
字符串:一个Unicode(utf8)字符串值。
示例模式:^(?P<group_name>\w*)$
-
元组结构体:只有一个字段(新类型习语)的元组结构体。该结构体需要实现 ´Deserialize´
#[derive(Deserialize)]
struct NewType(i32);
- 枚举:具有单元变体的枚举(没有新类型和变体字段)。该枚举需要实现 ´Deserialize´
#[derive(Deserialize)]
enum SomeEnum {
Foo,
#[serde(rename = "bar")]
Bar,
Baz(i32) // <- Will compile but is not available in matching because of newtype
};
- Option<>:所有上述类型都可以用作可选值
由 serde
支持的其他数据类型可能有效,但不是官方支持并测试的。
名言警句
如果你的正则表达式看起来像一只巨兽,任何人都无法理解,请重新考虑使用这个crate
依赖项
~2.6–4MB
~77K SLoC