それで、正規表現を使って黒魔術を発明することができました。いくつかのコマンド ライン引数を解析しようとしています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"
私が到達できる唯一の結論は、この正規表現は黒魔術の秘密を利用しており、この時点で非常に強力になり、HTML を単独で解析できるようになっているということです。
しかし、真剣に、ここで何が起こっているのですか?