5 个版本

使用旧的 Rust 2015

0.2.3 2023年3月7日
0.2.2 2023年3月7日
0.2.1 2019年8月27日
0.2.0 2017年5月31日
0.1.0 2017年5月30日

#544 in 文本处理

Download history 341/week @ 2024-03-13 266/week @ 2024-03-20 358/week @ 2024-03-27 496/week @ 2024-04-03 488/week @ 2024-04-10 386/week @ 2024-04-17 352/week @ 2024-04-24 228/week @ 2024-05-01 132/week @ 2024-05-08 171/week @ 2024-05-15 352/week @ 2024-05-22 227/week @ 2024-05-29 437/week @ 2024-06-05 312/week @ 2024-06-12 334/week @ 2024-06-19 323/week @ 2024-06-26

1,457 个月下载量
4 crates 中使用

MIT/Apache

17KB
345

regex_generate

使用正则表达式生成文本。这个 crate 非常新,且处于开发阶段。欢迎提出问题或 PR,或用于您自己的想法,如果您对此感兴趣。不提供任何保证或保修,使用此代码风险自担。

感谢 rust-lang/regex 项目团队,这是本 crate 的核心。使用 regex_syntax 使得本 crate 的开发变得容易 1000 倍。

文档

Docs.rs 自动生成并提供托管。

目前的文档质量不高。

用法

将此添加到您的 Cargo.toml

[dependencies]
regex_generate = "0.2"

并将此添加到您的 crate 根目录

extern crate regex_generate;

此示例生成一个 YYYY-MM-DD 格式的日期并打印出来。改编自 rust-lang/regex 的示例。

extern crate regex_generate;
extern crate rand;

use regex_generate::{DEFAULT_MAX_REPEAT, Generator};

fn main() {
    let mut gen = Generator::new(r"(?x)
(?P<year>[0-9]{4})  # the year
-
(?P<month>[0-9]{2}) # the month
-
(?P<day>[0-9]{2})   # the day
", rand::thread_rng(), DEFAULT_MAX_REPEAT).unwrap();
    let mut buffer = vec![];
    gen.generate(&mut buffer).unwrap();
    let output = String::from_utf8(buffer).unwrap();

    println!("Random Date: {}", output);
}

测试

使用 cargo test -- --nocapture 运行测试

基准测试

使用 rustup run nightly cargo bench 运行基准测试

技巧

  • 在您的字符类中明确指定,否则您将得到意外结果。
  • . 真正意味着 任何,例如任何有效的 Unicode 字符。
  • 同样,\d 意味着 任何 数字,而不仅仅是 [0-9]
  • 默认的最大重复次数(如 .*)是 100,但您可以使用 generate_with_max_repeat 自定义设置。

待办事项

  • 添加直接生成完整字符串的便利方法
  • 实现 Iter 以生成大量字符串?
  • 为 regex bytes 功能添加测试
  • Literal 中考虑不区分大小写
  • 对组编号或名称做些什么?(语法中没有后向引用,所以可能无法做任何事情。)

许可证

regex_generate 主要在 MIT 许可证和 Apache 许可证(版本 2.0)的条款下分发,部分内容受各种类似 BSD 许可证的覆盖。

有关详细信息,请参阅 LICENSE-APACHE 和 LICENSE-MIT。

依赖项

~5.5MB
~127K SLoC