这个小程序能够用一种类似正则表达式的句法来生成一个格式化过的随机字符串。
可以用来生成一个没人记得住的密码……什么的。
input : \w{5}-\w{5}-\w{5}-\W{5}
output: hki2I-3fhUu-6RCnL-""@,`
可以使用 stack 来构建这个项目。
$ stack build之后,执行:
$ formatted-random [<exprs>...]除了 {, }, [, ], \, ~, (, ), +, * 之外的字符,如果单独出现在输入中,应当会被原封不动地输出。
input : Hello, Haskell!
output: Hello, Haskell!
使用 [<pattern>] 来指代要随机产生的一个字符。
其中,pattern 支持这些格式:
[a-z]会随机变成任意一个小写字母:
input : [a-z]
output: e
[x]代表某一个字母本身:
input : [x]
output: x
- 以上的
pattern可以在一个方括号内自由组合:
input : [aeiou0-9]
output1: 8
output2: a
通过 \<character> 来输入一些特殊的字符,或者是一些常用的模式。
| character | effect |
|---|---|
| []{}~?+() | 生成它们自己。 |
| w | 字母或者数字,相当于 [a-zA-Z0-9] |
| W | 符号,相当于 [~a-zA-Z0-9](虽然现在还没有实现[~<pattern>]的格式……) |
| d | 数字 |
| D | 除了数字之外的东西。 |
| p | 所有可以打印的字符。 |
| a | 字母。 |
| A | 除了字母以外的东西。 |
通过 (<substr1>|<substr2>|...) 来在若干个模式串中随机选择一个。
input : (000|111|444){3}
output: 111444111
在任意一个 方括号/转义字符/字串 后,使用 {<integer>} 来重复它若干次。这些重复的随机字符不一定相同。
input : [aeiou0-9]{10}
output: 11eio64oee
可以使用 {<lowerbound>, <upperbound>} 句法来达到随机次重复的效果。
input : \d{6,16}
output: 05795719
也可以使用 + 来随机重复一次或更多次。
也可以使用 * 来随机重复〇次或更多次。
input : \d*\a+
output1: F
output2: 22milG