scanメソッド

はてなブックマークに追加はてなブックマーク Yahoo!ブックマークに登録 ニフティクリップに追加 Livedoor クリップに追加 BuzzurlにブックマークBuzzurlにブックマーク Twitterに投稿  

scanメソッドは、gsubメソッドのように、文字列中のすべてのマッチする部分を検索し、取り出します。
gsubメソッドとの違いは、検索してマッチした部分を取り出すだけで、置換は行わないという点です。
マッチした部分に対して、何らかの処理を行う場合に、scanメソッドを使うと便利です。

str = "hello world !"
p str.scan(/.o/)
str.scan(/[^\s]+/){|m|
    puts m
}
 
"aaabbbbbcccabcddddddddddeeffff".scan(/(.)(\1{2,})/){|a, b|
    puts "#{a}#{b} :#{a} - #{b}"
    puts "#{$&} :#{$1} - #{$2}"
}

scanメソッドは、マッチした部分を配列として返します。
また、scanメソッドは、ブロックを取ることができるので、マッチした部分に繰り返し処理を行うことができます。
さらに、正規表現中で、「()」(括弧)で括った表現は、ブロックに引数として渡せます。(上記の場合、|a, b|)
ブロック内の以下2行の処理は、同じ処理となります。

puts "#{a}#{b} :#{a} - #{b}"
puts "#{$&} :#{$1} - #{$2}"

実行結果です。

["lo", "wo"]
hello
world
!
aaa :a - aa
aaa :a - aa
bbbbb :b - bbbb
bbbbb :b - bbbb
ccc :c - cc
ccc :c - cc
dddddddddd :d - ddddddddd
dddddddddd :d - ddddddddd
ffff :f - fff
ffff :f - fff

日時: 2008年06月29日 00:19
コメントを投稿






トラックバック

■この記事のトラックバックURL:
http://www.mapee.jp/mpe334/mt-tb.cgi/385

この記事にトラックバックされる方は、参照先が分かるようにするために、「scanメソッド」へのリンクをお願いいたします。
以下のHTMLタグをトラックバック送信元ページ内に挿入して下さい。



※この記事へのリンクがない、また関連のないページからのトラックバックは反映されませんので、ご了承下さい。






あわせて読みたいブログパーツ
フィードメーター - Ruby勉強ルーム