From: Kikutani Makoto Date: 1997-09-21T23:15:54+09:00 Subject: [ruby-list:4472] Re: nif2news.rb きくたにです。 Sep 18 において 石塚圭樹 さん曰く: > >|ただ、元のプログラムだとマッチしたパターンを使って処理してるので、 > >|下の例で、手続きの中で $1 とかを参照できればいいのですが、 > >|さすがに無理ですね。もう一度マッチさせるのも美しくないし。 > > 最近同じような話題が続いていますね(^^;;; > > [ruby-list:4400]で紹介したんですが, =~ を用いるのではなくて, > String#scanでマッチした配列を受けとりそれを, callで渡すようにすればよ > いと思いますよ. > > def actions.call(str) > each do |assoc| > unless (match = str.scan(assoc[0])).empty? > assoc[1].call match > break > end > end > end > > actions.add(mail_start) do > |match| > #メールの処理 > end ありがとうございます。けいじゅさんのが私には一番わかりやすかったので この方法にしました。パターンに括弧があるのとないのがあるので、 以下のようにしました。括弧なしパターンだと、matchの値はnilなので empty? は{使えない|使わなくていい}ですよね。 def actions.call(str) each do |assoc| if str =~ assoc[0] if match = str.scan(assoc[0]) assoc[1].call match else assoc[1].call end break end end end せっかくなので、nif2news.rb は nifty/FGALTS にポストしておこうかな。 -- 人生を背負い投げ 菊谷 誠(Kikutani Makoto) kikutani@eis.or.jp hgf03701@niftyserve.or.jp http://www.eis.or.jp/muse/kikutani/