grex 既是一个库也是一个命令行工具,它可以自动从用户提供的测试用例生成单个正则表达式。

项目地址

https://github.com/pemistahl/grex

使用说明

grex 可以根据用户提供的测试用例生成正则表达式。

grex [OPTIONS] {输入...|--file <文件>}

输入参数

  • [输入...]:一个或多个以空格分隔的测试用例。
  • -f, --file <文件>:从一个文件中读取测试用例,每个测试用例占一行。

数字选项

  • -d, --digits:将任何 Unicode 十进制数字转换为 \d
  • -D, --non-digits:将任何不是 Unicode 十进制数字的字符转换为 \D

空白选项

  • -s, --spaces:将任何 Unicode 空白字符转换为 \s
  • -S, --non-spaces:将任何不是 Unicode 空白字符的字符转换为 \S

单词选项

  • -w, --words:将任何 Unicode 单词字符转换为 \w
  • -W, --non-words:将任何不是 Unicode 单词字符的字符转换为 \W

转义选项

  • -e, --escape:将所有非 ASCII 字符替换为 Unicode 转义序列。
  • --with-surrogates:如果设置了 --escape,则将星号代码点转换为代理对。

重复选项

  • -r, --repetitions:检测重复的非重叠子字符串并转换为 {min,max} 量词表示法。
  • --min-repetitions <数量>:指定如果设置了 --repetitions,则要转换的子字符串重复的最小数量,默认为 1。
  • --min-substring-length <长度>:指定如果设置了 --repetitions,则要转换的重复子字符串的最小长度,默认为 1。

锚点选项

  • --no-start-anchor:从生成的正则表达式中移除脱字符锚点 ^
  • --no-end-anchor:从生成的正则表达式中移除美元符号锚点 $
  • --no-anchors:从生成的正则表达式中移除脱字符和美元符号锚点。

显示选项

  • -x, --verbose:在详细模式下生成更易于阅读的正则表达式。
  • -c, --colorize:为生成的正则表达式提供语法高亮。

其他选项

  • -i, --ignore-case:执行不区分大小写的匹配,字母匹配大写或小写。
  • -g, --capture-groups:将非捕获组替换为捕获组。
  • -h, --help:打印帮助信息。
  • -v, --version:打印版本信息。

官方例子

  • 以下示例展示了各种支持的正则表达式语法特性。
$ grex a b c
^[a-c]$

$ grex a c d e f
^[ac-f]$

$ grex a b x de
^(?:de|[abx])$

$ grex abc bc
^a?bc$

$ grex a b bc
^(?:bc?|a)$

$ grex [a-z]
^\[a\-z\]$

$ grex -r b ba baa baaa
^b(?:a{1,3})?$

$ grex -r b ba baa baaaa
^b(?:a{1,2}|a{4})?$

$ grex y̆ a z
^(?:y̆|[az])$
注:
图元 y̆ 由两个 Unicode 符号组成:
U+0079 (拉丁小写字母 Y)
U+0306 (组合式短音符号)

$ grex "I ♥ cake" "I ♥ cookies"
^I ♥ c(?:ookies|ake)$
注:
包含空格的输入必须用引号括起来。

以下命令行用法中 <INPUT> 为字符串 I ♥♥♥ 36 and ٣ and 💩💩.

$ grex <INPUT>
^I ♥♥♥ 36 and ٣ and 💩💩\.$

$ grex -e <INPUT>
^I \u{2665}\u{2665}\u{2665} 36 and \u{663} and \u{1f4a9}\u{1f4a9}\.$

$ grex -e --with-surrogates <INPUT>
^I \u{2665}\u{2665}\u{2665} 36 and \u{663} and \u{d83d}\u{dca9}\u{d83d}\u{dca9}\.$

$ grex -d <INPUT>
^I ♥♥♥ \d\d and \d and 💩💩\.$

$ grex -s <INPUT>
^I\s♥♥♥\s36\sand\\sand\s💩💩\.$

$ grex -w <INPUT>
^\w ♥♥♥ \w\w \w\w\w \w \w\w\w 💩💩\.$

$ grex -D <INPUT>
^\D\D\D\D\D\D36\D\D\D\D\\D\D\D\D\D\D\D\D$

$ grex -S <INPUT>
^\S \S\S\S \S\S \S\S\S \S \S\S\S \S\S\S$

$ grex -dsw <INPUT>
^\w\s♥♥♥\s\d\d\s\w\w\w\s\d\s\w\w\w\s💩💩\.$

$ grex -dswW <INPUT>
^\w\s\W\W\W\s\d\d\s\w\w\w\s\d\s\w\w\w\s\W\W\W$

$ grex -r <INPUT>
^I ♥{3} 36 and ٣ and 💩{2}\.$

$ grex -er <INPUT>
^I \u{2665}{3} 36 and \u{663} and \u{1f4a9}{2}\.$

$ grex -er --with-surrogates <INPUT>
^I \u{2665}{3} 36 and \u{663} and (?:\u{d83d}\u{dca9}){2}\.$

$ grex -dgr <INPUT>
^I ♥{3} \d(\d and ){2}💩{2}\.$

$ grex -rs <INPUT>
^I\s♥{3}\s36\sand\\sand\s💩{2}\.$

$ grex -rw <INPUT>
^\w ♥{3} \w(?:\w \w{3} ){2}💩{2}\.$

$ grex -Dr <INPUT>
^\D{6}36\D{5}٣\D{8}$

$ grex -rS <INPUT>
^\S \S(?:\S{2} ){2}\S{3} \S \S{3} \S{3}$

$ grex -rW <INPUT>
^I\W{5}36\Wand\\Wand\W{4}$

$ grex -drsw <INPUT>
^\w\s♥{3}\s\d(?:\d\s\w{3}\s){2}💩{2}\.$

$ grex -drswW <INPUT>
^\w\s\W{3}\s\d(?:\d\s\w{3}\s){2}\W{3}$

参考资料

grex CSDN下载

05-16 11:45