真空マッチ (1)

http://www.siaris.net/index.cgi/Programming/LanguageBits/Ruby/Oniguruma.rdoc/style/print

この中で、ruby、鬼車、perlの仕様の違いが指摘されていた。

  $ sruby -e '"abax" =~ /((a)*(b)*)*/; print #{$&}:#{$1}:#{$2}:#{$3}\n"'
  aba::a:b
  $ oruby -e '"abax" =~ /((a)*(b)*)*/; print "#{$&}:#{$1}:#{$2}:#{$3}\n"'
  aba::a:b
  $ perl -e '"abax" =~ /((a)*(b)*)*/; print "#{$&}:#{$1}:#{$2}:#{$3}\n"'
  #{aba}:#{}:#{}:#{}

perlの$2, $3の値が、マッチしていないという意味の空であれば正しいと思うが、空文字列''なら正しいとは思わない。どちらの意味なのかは、perlに詳しくないのでわからない。

つまり、正しくて一番好ましいのは、$1 = '', $2 = nil, $3 = nilだろう。
ruby, 鬼車の結果である、$1 = '', $2 = 'a', $3 = 'b' は正しい。
$1 = '', $2 = '', $3 = '' であれば、正しくない。