【php】正規表現ってそんなに負荷が高いの?(その2)
負荷が高い正規表現、危険な正規表現は存在する。
example
(.*)*^
最後に^(行頭)と書いてあるので、結果としてはどんな文字列にもマッチしないでマッチするのは行頭のみなのだが、マッチするまでにあらゆる組み合わせにトライするので、恐ろしく負荷が高い。
ユーザーに入力させた正規表現で検索をするようなシステムは注意が必要。
まずお手軽に、Javascriptで確認。
var s = "1234567890123456789012345"; var a = new Date().getTime(); s.match(/(.*)*^/); var b = new Date().getTime(); alert(b-a);
最初の文字列 s の文字数を1文字ずつ変化させていくと、2倍2倍…と処理に要する時間が変化していきます。
たとえば、……23文字 → 1.6秒、24文字 → 3.2秒、25文字 → 6.4秒、26文字 → 13秒、……そろそろもうだめです。試したPCではCPU使い切ってますし、使い物にならない速度です。
【php】正規表現ってそんなに負荷が高いの?(その3) at softelメモ 2009年12月12日 17:57
[…] 前回の恐ろしい正規表現をphpで試してみようとしたところ、予想した結果にならなかった。 […]