« 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

Post a comment



(Not displayed with comment.)


Comments are moderated, and will not appear on this weblog until the author has approved them.



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を使う »