« Ruby における 「正規表現」 | メイン | Rubyの正規表現「 . (ピリオド or ドット)」 » |
このブログを書く四元輝博とジョシュア清水が経営する旅行代理店スカイメリカ
ジョシュア清水 自らが操縦する、日本語でのガイドと会話を楽しみながらハワイ島を巡るセスナの旅
このブログを書く四元輝博と共にスカイメリカを経営するハワイ島在住の日本人パイロット、ジョシュア清水のブログ
スカイメリカの共同経営者、シリコンバレー在住の四元輝博によるIT情報・ベンチャー起業に関するブログ
四元輝博によるに 「組み込みJava による M2Mソリューション」に関する調査レポート・サイト
: 個別エントリー・アーカイブ :
現在のスコープで最後に成功したマッチに関する MatchData オブジェクトです。 これを設定すると $& や $1 ... $9 などの 値が変化します。 このデータから n 番目のマッチ($n)を取り出すためには $~[n] で 参照できます。とある。 また この「 $~ 」は、「 Regexp.last_match 」 と同じである。 よって、「 $~[0], $~[1], $~[2] 」 も 「 Regexp.last_match[0], Regexp.last_match[1], Regexp.last_match[2] 」 と等価となる。
現在のスコープで最後に成功した正規表現のパターンマッチでマッチした文字列です。 最後のマッチが失敗していた場合には nil。となっている。
test="The quick brown fox jumps over the lazy dog." p test =~ /(qui)(ck)/ puts p $~ p $~[0], $~[1], $~[2] p $&, $1, $2 puts p Regexp.last_match p Regexp.last_match[0], Regexp.last_match[1], Regexp.last_match[2] p $&, $1, $2というRubyスクリプトを実行してみる。 ここで、2行目の正規表現で「(qui)(ck)」とあるのは 正規表現のグループ化で、 最後に成功したパターンマッチでn番目の括弧にマッチした値が $1, $2 ... に格納される。 これは Regexp.last_match[1], Regexp.last_match[2], ... と同じ。 よって実行結果は
4 #<MatchData:0x2ea421c> "quick" "qui" "ck" "quick" "qui" "ck" #<MatchData:0x2ea421c> "quick" "qui" "ck" "quick" "qui" "ck"となる。この結果から 「 $~ 」と「 Regexp.last_match 」 が、 「 $& 」と「 Regexp.last_match[0] 」 とが 全く同じものである ことが確認できる。
このエントリーのトラックバックURL:
http://www.skymerica.com/blog/yotsumoto/mt/mt-tb.cgi/672