プロフィール

kosaki

Author:kosaki
連絡先はコチラ

ブログ検索
最近の記事
最近のコメント
最近のトラックバック
リンク
カテゴリー
月別アーカイブ
RSSフィード
FC2ブログランキング

スポンサーサイト このエントリーをはてなブックマークに追加

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。


スポンサー広告 | 【--------(--) --:--:--】 | Trackback(-) | Comments(-)

perlって正規表現は常にNFAで扱うんだっけ? このエントリーをはてなブックマークに追加

はてブをウォッチしていてこんな話をみつけた。

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あたり?





犯人像
おまえは何をいっているんだ? ランキング!

関連記事


プログラミング | 【2006-06-15(Thu) 19:48:07】 | Trackback:(1) | Comments:(2)
コメント
このコメントは管理人のみ閲覧できます
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
  1. 無料アクセス解析
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。