|
[ruby-list:42458] Re: 多量の正規表現との効率的なマッチのアイデアを、、: msg#00112lang.ruby.japanese
From: しん <dezawa-eY1vtc/6GtbR7s880joybQ@xxxxxxxxxxxxxxxx> Subject: [ruby-list:42456] Re: 多量の正規表現との効率的なマッチのアイデアを、、 Date: Fri, 23 Jun 2006 10:05:50 +0900 > こういうデータで > 52 convctr.overture.com > 52 ct1.shinobi.jp > 52 download.jword.jp > 52 download.windowsupdate.com > 52 officescan-p.activeupdate.trendmicro.com:80 > 49 w3b.mydomain.co.jp > 49 www.example.com > 何もしなければこういう結果を出す。 > 52 5count > 49 2count 納得。 > そこで、たとえばこういう情報を追加して > mycat=[ "m0" , "m0" ,"m1" ,"m2" ] > myreg=[ /windowsupdate/, /trendmicro/,/w3b\.mydomain/,/mydomain/ ] > > こういう結果にする。 > 52 3count 52に分類されているドメインのうちmyregのどれかに一致するのはこの2つでは? 52 download.windowsupdate.com 52 officescan-p.activeupdate.trendmicro.com:80 > ついでに、、、 > m0 windowsupdate > m0 trendmicro > m1 w3b.mydomain > m2 mydomain > > という入力データから正規表現のかたまりを作るには、 > while gets でくくってこつこつ、 > f=stlip して myreg << Reg.new(f[1]).gsub(/\./,"\\./).gsub(/\//,"\\/") > するしか無いですか? stlip? Reg? 正規表現のquoteなら.gsub(/\./,"\\./).gsub(/\//,"\\/")の部分はRegexp.quoteが使えますね。 Rubyらしさを求めるならば、ぜひブロックを使いましょう。 each、map、find_allあたりから慣れてみましょう。 各々の要素について処理を行ない新たな配列を返すmapはとても便利です!! input.split(/\n/).map{|line| cat,data = line.split; [cat, Regexp.new(Regexp.quote(data))]} # => [["m0", /windowsupdate/], ["m0", /trendmicro/], ["m1", /w3b\.mydomain/], ["m2", /mydomain/]] > 正規表現を値にする配列を作り、レコードを読むたびに配列の中を順に > マッチさせて行けば良いのでしょうが、なんかおもしろくないな、、 > ということで、 > 効率的に行なう方法 > か > rubyらしい、きれいな方法か > か > がないものか悩んでいるところです。 こういう質問をする場合は悩む前にとりあえず動くプログラムを書いてください。 どういう形であれ動くプログラムがあれば意図は伝わります。 -- rubikitch http://www.rubyist.net/~rubikitch/
|
|
| <Prev in Thread] | Current Thread | [Next in Thread> |
|---|---|---|
| Previous by Date: | [ruby-list:42457] Re: 多量の正規表現との効率的なマッチのアイデアを、、, Itou-T15-l4TFbgTioCUTBYAz+LHnZg |
|---|---|
| Next by Date: | [ruby-list:42459] Re: 多量の正規表現との効率的なマッチのアイデアを、、, しん |
| Previous by Thread: | [ruby-list:42457] Re: 多量の正規表現との効率的なマッチのアイデアを、、, Itou-T15-l4TFbgTioCUTBYAz+LHnZg |
| Next by Thread: | [ruby-list:42459] Re: 多量の正規表現との効率的なマッチのアイデアを、、, しん |
| Indexes: | [Date] [Thread] [Top] [All Lists] |
| News | FAQ | advertise |