原です。 > まつもと ゆきひろです > |原です。あけましておめでとうございます。 > > |(3)次のコードで制御がかえらなくなる。 > > このケースはほぼワーストケースのようで(否定のor),マッチする > 文字が1文字長くなる度にほぼ倍々で実行時間がかかります.私の > ノートでは > > "Server: httpd.rb/1.2\n" =~ /(\S|[^a])+b/ > > に20秒かかりました.これでは制御か返らなくなるように感じられ > ると思います.しかし,これを直すのは結構大変なので(たとえば > 上記のパターンは否定のorで . と同等で,通常は使われないパター > ンのはずですし),将来正規表現のルーチンを書き換えるまで(いつ > になるんだろう)我慢してください. そういうことですか。我慢します。:-) もちろんこのコードを実際書いたわけではなくてあくまでサンプルです。 それで思い出したけど、もちろんご存知だと思いますが、ruby が使っ ている正規表現ルーティンは結構遅くて、例えば、各行が pizzicato - - [18/Nov/1996:14:17:05 +0900] "GET /news/fj.os.linux/index.shtml HTTP/1.0" 200 95191 みたいな3万行ある httpd のログを -----^ test.rb #!/usr/local/bin/ruby while gets ~ /\S+ - - \[\d+\/\w+\/\d+:\d+:\d+:\d+ \S+\] ".*" \d+ \d+/ end -----$ に食わせると、ここの機械では約53秒かかりますが、jperl4 で -----^ test.pl #!/usr/local/bin/jperl while (<>) { /\S+ - - \[\d+\/\w+\/\d+:\d+:\d+:\d+ \S+\] ".*" \d+ \d+/; } -----$ だと約9秒です。^^; ---===-=-=-=-=-=-=-=-=======--=-=-=-==-=-===-=-=-=-=-=-=--=-==-=-- Shin-ichro Hara(Nagaoka Univ.of Tech.)