logo       

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

lang.ruby.japanese

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

出沢です。

From: rubikitch <rubikitch-X+L+6nJQZ58h9ZMKESR00Q@xxxxxxxxxxxxxxxx>
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" }
'





<Prev in Thread] Current Thread [Next in Thread>
Google Custom Search

News | FAQ | advertise