お薦め ページ


メニュー

ハワイ島 遊覧飛行ツアー

ハワイ島 B&B・ホテル

ハワイ島 不動産情報

ハワイ島 情報・観光ガイド

ブログ(Blog)

その他

関連サイト

: 個別エントリー・アーカイブ :

2007年1月 7日

Rubyの正規表現マッチで利用する「$〜」

Ruby において 正規表現でマッチさせた場合、 ローカルスコープ変数「 $~ 」に自動的にある値がセットされる。 これは、現在のスコープで最後に成功したマッチに関する MatchData オブジェクト を表す。

Rubyのマニュアル 「$~」 によると
現在のスコープで最後に成功したマッチに関する MatchData オブジェクトです。 これを設定すると $& や $1 ... $9 などの 値が変化します。 このデータから n 番目のマッチ($n)を取り出すためには $~[n] で 参照できます。
とある。 また この「 $~ 」は、「 Regexp.last_match 」 と同じである。 よって、「 $~[0], $~[1], $~[2] 」 も 「 Regexp.last_match[0], Regexp.last_match[1], Regexp.last_match[2] 」 と等価となる。

さらに、上記の説明にも出てきた「 $& 」という変数があり、 これが、Regexp.last_match[0] と同じであり、 マニュアルでの説明には
現在のスコープで最後に成功した正規表現のパターンマッチでマッチした文字列です。 最後のマッチが失敗していた場合には 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] 」 とが 全く同じものである ことが確認できる。

【参考リンク】



カテゴリー: Ruby , 正規表現     2007年1月 7日 22:16

トラックバック

このエントリーのトラックバックURL:
http://www.skymerica.com/blog/yotsumoto/mt/mt-tb.cgi/672


コメント

コメントしてください




保存しますか?


 
ハワイ島での遊覧飛行ツアーとB&Bのスペシャリスト、スカイメリカ
Copyright © 2003,2009 Skymerica Corp. All rights reserved.