From: "5.5" <5.5@...> Date: 2011-05-01T21:18:50+09:00 Subject: [ruby-list:48033] Re: 文字列を正規表現にマッチする部分と他の部分に分割 信岡さん 5.5 です。 >> 大きなテキストで,かつマッチ箇所が多数あると,大量の文字列ゴミが出ま >> すよね。 > > そうですね、ごみは出てしまいますね。 ごみを出さないようにするには、 > $' を str に代入するのではなく、マッチした位置を index として記録しておいて、 > String#match メソッドの第 2 引数に渡すような処理にするとか、すれば > いいのでしょうか。 第二引数? と思ってるりまを見ました。 Ruby 1.9 で第二引数が導入されたんですね。 > 実を言うと私も 5.5 さんが提案されたようなメソッドが欲しいなーと思ったことがあって、 > その時は自分で適当にそういうメソッドを作ったのですが、確かに実行速度などを > 考えると C での実装で提供して貰えるとありがたいですよね。 速度面のほかに,私のようなヘタレには毎回「えーっとどう書くんだっ け」という煩わしさもありまして。 > ただ、String クラスや Regexp クラスに新しく追加すべきメソッドかというとそうでもないなぁ、 > とも感じていて。。 追加されるとすれば StringScanner あたりが適当ですかね。 String に入れるにはあまり“基本的”ではないのかもしれませんね。 私としては String#scan の姉貴って感じなのですが。 > ちなみに私がそういうメソッドを欲しいと思ったのは、XML のタグ部分 ('<' と'>' で囲まれた部分) > とそれ以外の部分を分けるという処理を書いたときです。 以下のように書けると便利ですよね。 > > xml_str.each_segment /<[^>]*>/ do |str, matched| > if matched > proc_for_tag( str ) > else > proc_for_text( str ) > end > end 私も,過去に必要と思ったケースの一つはこの手のものでした。 -- 5.5@moji.gr.jp