#regex #set #parser #编译时 #运行时

re-set-macros

编译时正则表达式集解析器

4 个版本 (2 个重大变更)

0.2.0 2023 年 4 月 17 日
0.1.1 2023 年 4 月 6 日
0.1.0 2023 年 3 月 4 日
0.0.3-alpha.02023 年 2 月 11 日

#3 in #regexp

Apache-2.0

20KB
350 代码行

re-set

编译和运行时正则表达式集解析器。

宏用法

use re_set_macros::find;

find!(fn find_identifier "[_[:alpha:]][[:word:]]*");

assert_eq!(find_identifier("foo bar"), Some((0, "foo")));
use re_set_macros::find;

find!(pub fn match_string
  // Single quotes
  r"'(\\'|.)*?'",
  // Double quotes
  r#""(\\"|.)*?""#,
  // Multi-line strings
  r"(?s)`(\\`|.)*?`"
);

let (_, string) = match_string(r#""Hello, world!""#).unwrap();

assert_eq!(string, r#""Hello, world!""#);
use re_set_macros::find;

find!(pub(crate) fn next_token
  // 0: Punctuation
  "[[:punct:]]+",
  // 1: Words
  "[[:word:]]+",
  // 2: Whitespace
  "[[:space:]]+"
);

let result = next_token("foo bar");

assert_eq!(result, Some((1, "foo")));

let (index, token) = result.unwrap();

match index {
  0 => println!("Found punctuation: {token}"),
  1 => println!("Found word: {token}"),
  2 => println!("Found whitespace: {token}"),
  _ => unreachable!(),
}

依赖项

~3.5–4.5MB
~89K SLoC