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\s٣\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\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\s٣\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\W٣\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}$