わたなべです.

Yukihiro Matsumoto <matz / netlab.co.jp> writes:

:まず$nは開き括弧が出て来た順番でマッチします.ですから
:
:  /^abc (\w+) (\w+)|^abc (\w+) (\w+) (\w+)/
:        1     2          3     4     5
:
:になります.

しかも
  /^abc (\w+) (\w+)|^abc (\w+) (\w+) (\w+)/
この部分は
  /(^abc (\w+) (\w+)$)|(^abc (\w+) (\w+) (\w+)$)/
こうしないと多分きくたにさんの意図した通りには動いてないでしょう.
#で数字がまたずれる.

こんな感じの正規表現なら perl でも ruby でも同じです.
$_ = "abc def ghi jkl"
if /^abc (\w+) (\w+)( (\w+))?$/
    printf("\$1 = %s\n", $1)
    printf("\$2 = %s\n", $2)
#   printf("\$3 = %s\n", $3)
    printf("\$4 = %s\n", $4)
end

-- 
わたなべひろふみ