« IEとCometの相性が悪い | Main | ErlangからPerlを使う »

Thursday, May 24, 2007

oregexp動いた

以前にoregexp動かない…と書いたが,その後動くようになった.

動かないと思っていたのは,テストコードだけだった模様.
eunitという別のモジュールが必要だったらしい.
eunitを見つけて入れてみたけど,やっぱりなんかうまくいかない.
(めんどくさいので深追いはしていない…)

とりあえずoregexp自体は正常に動作するのを確認できた.
こんな感じで利用できる.

1> oregexp_svr:start().
{ok,<0.33.0>}
2> oregexp:match("http://www.mikage.to/test.html", "([\\w\\.]+)").
{match,1,4,[{0,"http"},{1,"http"}]}
3> oregexp:match("http://www.mikage.to/test.html", "\/\/([\\w\\.]+)").
{match,6,15,[{0,"//www.mikage.to"},{1,"www.mikage.to"}]}

ベンチを取ってみると,かなり速い.
parseしてからmatchする方法であれば,parserを使う方法と同等以上の速度.

smp無しbeamで0.977秒くらいの速度が出た.

氷魚にゃさんにErlangからPerlを呼び出すモジュールを作ってもらい,限界までチューンしたけど,それより速い.
Perlの方は,関数呼び出しを1回挟まないとダメで,それが大きなオーバーヘッドになってしまっている模様.

oregexpベンチのソースは以下のような感じ.

-module(strregexpo).
-export([bench/0, bench/2]).

bench() ->
oregexp_svr:start(),
{ok, Reg} = oregexp:parse("^[^ ]+ [^ ]+ [^ ]+ \\[[^\\]]+\\] \"([^\"]+)\""),
Time = timer:tc(strregexpo, bench, [16#ffff, Reg]),
io:format("~w~n", [Time]).

bench(0, _Reg) ->
0;
bench(N, Reg) ->
String = "12.34.123.12 - - [17/Apr/2007:23:53:13 +0900] \"GET /html/1495.html HTTP/1.1\" 200 6980 \"http:/
/wiki.ffo.jp/html/2633.html\" \"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)\"\n",
oregexp:match(String, Reg),
bench(N - 1, Reg).

Erlangで文字列操作をするときは,oregexpが正解っぽい.

|

« IEとCometの相性が悪い | Main | ErlangからPerlを使う »

Comments

The comments to this entry are closed.

TrackBack


Listed below are links to weblogs that reference oregexp動いた:

» ErlangからPerlを使う [404 Blog Not Found]
hio++. ひおにっき(2007-05-22)外部ポートっていう言い方があってるのかわかんないけれど^^; 別プロセスを起動してそっちで処理して結果を返す. 返さなくてもいいんだけど. Erlang-Port-0.04として CPAN にアップしてあります.... [Read More]

Tracked on Thursday, May 24, 2007 06:03 PM

» [Prog [ひおにっき]
[Program] Erlang+Perl (組み込みドライバ編) #2 みかげさんとこにあるように, oregexp が速くてちょっとしょんぼり〜だったのもうちょっとがんばってみました. [Read More]

Tracked on Thursday, May 24, 2007 09:10 PM

« IEとCometの相性が悪い | Main | ErlangからPerlを使う »