所以我设法使用正则表达式发明了一些黑魔法。我正在尝试解析一些命令行参数,并且我想接受格式test[somethinginhere]
为“somethinginhere”是要运行的测试名称的任何参数。
这就是代码的样子。后面还有更多代码实际使用布尔值执行函数,但这是处理参数的部分。
ARGV.each do |arg|
case arg.downcase
when "help"
@help = true
when "install"
@install = true
when "deploy"
@deploy = true
when "configure"
@configure = true
when /^test\[([a-z]+)\]$/
@test << arg.downcase[/^test\[([a-z]+)\]$/,1]
else
@usage = true
end
end
现在这里是黑魔法的用武之地:对于任何不包含小写“s”的测试名称,该程序将正常运行。以下将通过:
$ ./AutoTest.rb test[a]
Running Test "ATest"
$ ./AutoTest.rb test[b]
Running Test "BTest"
$ ./AutoTest.rb test[anything]
Running Test "AnythingTest"
以下将失败:
$ ./AutoTest.rb test[s]
Usage: AutoTest [help|install|deploy|configure|test[*]]
但这会过去:
$ ./AutoTest.rb test[S]
Running Test "STest"
实际上,任何带有小写字母 s 的东西都会失败:
$ ./AutoTest.rb test[user]
Usage: AutoTest [help|install|deploy|configure|test[*]]
除非 s 大写:
$ ./AutoTest.rb test[uSer]
Running Test "UserTest"
然后我能得出的唯一结论是,这个正则表达式已经利用了 Black Magic 的秘密,并且在这一点上变得如此强大以至于它甚至可以自己解析 HTML。
但说真的,这里发生了什么?