[#42454] 多量の正規表現との効率的なマッチのアイデアを、、 — しん <dezawa@...>

出沢です

22 messages 2006/06/22
[#42455] Re: 多量の正規表現との効率的なマッチのアイデアを、、 — rubikitch <rubikitch@...> 2006/06/22

From: しん <dezawa@aliadne.net>

[#42456] Re: 多量の正規表現との効率的なマッチのアイデアを、、 — しん <dezawa@...> 2006/06/23

出沢です

[#42458] Re: 多量の正規表現との効率的なマッチのアイデアを、、 — rubikitch <rubikitch@...> 2006/06/23

From: しん <dezawa@aliadne.net>

[#42459] Re: 多量の正規表現との効率的なマッチのアイデアを、、 — しん <dezawa@...> 2006/06/23

出沢です

[#42460] Re: 多量の正規表現との効率的なマッチのアイデアを、、 — rubikitch <rubikitch@...> 2006/06/23

From: しん <dezawa@aliadne.net>

[#42461] Re: 多量の正規表現との効率的なマッチのアイデアを、、 — しん <dezawa@...> 2006/06/23

出沢です。

[ruby-list:42461] Re: 多量の正規表現との効率的なマッチのアイデアを、、

From: しん <dezawa@...>
Date: 2006-06-23 06:14:31 UTC
List: ruby-list #42461
出沢です。

From: rubikitch <rubikitch@ruby-lang.org>
Subject: [ruby-list:42460] Re: 多量の正規表現との効率的なマッチのアイデアを、、
Date: Fri, 23 Jun 2006 12:29:49 +0900

> > 成る程。
> > ブロック内の最後の式に置き換わるわけですね。
> > String が 配列に化けるのかぁ。。

   配列の 要素が String から 配列に化けるのかぁ  でした。

やりたいことを作ってみました。
このなかの、
  while input.gets
    cat,url=$_.chop.split
    myreg.each{|catreg|         # このあたりが
      url =~ catreg[1] || next  # もっと美しくならんか
      cat = catreg[0]           # 馬鹿サーチではなく
      break                     # もっと効率良くならないか
    }                           # というのが、今回の「思い」です。
  
    count[cat] = (count[cat]||=0)+1
  end


#!/bin/sh

cat > testdata <<EOF
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
EOF

cat > myreg <<EOF
m0 windowsupdate
m0 trendmicro
m1 w3b.mydomain
m2 mydomain
EOF


ruby -e 'myreg=Array.new
$/ = nil
input=open("myreg")

myreg=input.gets.split(/\n/).map{|line| 
      cat,data = line.split; 
      [cat, Regexp.new(Regexp.quote(data))]
   }
input.close

$/ = "\n"
input = open("testdata")

count=Hash.new
while input.gets
  cat,url=$_.chop.split
  myreg.each{|catreg|
    url =~ catreg[1] || next
    cat = catreg[0]
    break
  }
  
  count[cat] = (count[cat]||=0)+1
end

count.each{|k,v| print "#{k} #{v} count\n" }
'


In This Thread