はてブをウォッチしていてこんな話をみつけた。
http://qootas.org/blog/archives/2006/06/perl_regex_perf.html
あと、こっちで、なんか続きがあるっぽい
http://d.hatena.ne.jp/fbis/20060615/1150333992
うーん|が遅くなるのってNFA特有の話ですよねぇ。
perlって常にNFAなんでしたっけ?
記憶では後方参照とかない単純なやつはDFAに落としてくれるとなっていたのだが、どこと混線したのだろう・・・
GNU grepあたり?

おまえは何をいっているんだ? ランキング!
http://qootas.org/blog/archives/2006/06/perl_regex_perf.html
来日してる US の TypePad エンジニア Garth と話をしているときにでてきた正規表現の話。
$char =~ m/\p{Han}|\p{Hiragana}|\p{Katakana}/; #NG
$char =~ m/[\p{Han}\p{Hiragana}\p{Katakana}]/; #OK
return if $char =~ m/abc|def|ghi/; #NG
return if ($char =~ m/abc/ or $char =~ m/def/ or $char =~ m/ghi/); #OK
"|"(パイプ)を使った正規表現はめちゃくちゃ遅いから使わないように、ということです。確かにベンチマークを取ると32倍速いです。
あと、こっちで、なんか続きがあるっぽい
http://d.hatena.ne.jp/fbis/20060615/1150333992
うーん|が遅くなるのってNFA特有の話ですよねぇ。
perlって常にNFAなんでしたっけ?
記憶では後方参照とかない単純なやつはDFAに落としてくれるとなっていたのだが、どこと混線したのだろう・・・
GNU grepあたり?

おまえは何をいっているんだ? ランキング!
このコメントは管理人のみ閲覧できます
2007-09-02 日 00:32:59 |
|
# [ 編集]
このコメントは管理人のみ閲覧できます
2007-12-18 火 03:58:22 |
|
# [ 編集]
正規表現においては、/a|b|c/(alteration)は[abc](character class)にすべし、というのは、perlに限らない常識です。Mastering Regular ExpressionJeffrey E. Friedl [邦訳: 詳説 正規表現]qootas.org/blog - perl regex performance"|"(パイプ)を使った...
【2006-06-16 Fri 00:05:19】 | 404 Blog Not Found
【2006-06-16 Fri 00:05:19】 | 404 Blog Not Found