-PHP Tips- 第1回 eregとpregの比較

eregもpregも正規表現だけど、どちらが高速なの?
【Tips】eregよりpregを使え!
【Description】perl互換正規表現の方が、2.5倍は高速。
phpの高速化のTipsをまとめたページがいまいち見つからないので、少しずつメモ代わりに書いていこうかなと思って、カテゴリを作りました。

<?php
define("WORK_TIME", 20000);

function getmicrotime(){
    list($usec, $sec) = explode(" ",microtime());
    return ((float)$usec + (float)$sec);
}

$to_search = <<<EOF
<!-- Topix --><tr><td colspan=2><small>・<a href="http://dailynews.yahoo.co.jp/fc/economy/railway/">リニア、有人で世界最速581km</a></small></td></tr><tr><td colspan=2><small>・<a href="http://dailynews.yahoo.co.jp/fc/economy/ashikaga_bank/">足銀対応、閣僚間で不協和音</a><img src="http://img.yahoo.co.jp/images/new2.gif" width=28 height=11 alt="[new]" border=0></small></td></tr><tr><td colspan=2><small>・<a href="http://dailynews.yahoo.co.jp/fc/entertainment/broad_casting/">日テレやらせ「幻のイセエビ」</a></small></td></tr><tr><td colspan=2><small>・<a href="http://dailynews.yahoo.co.jp/fc/computer/cellular_phone_new_product/">au 「W11H」不具合で販売中止</a><img src="http://img.yahoo.co.jp/images/new2.gif" width=28 height=11 alt="[new]" border=0></small></td></tr><tr><td colspan=2><small>・<a href="http://dailynews.yahoo.co.jp/fc/sports/eafc2003/">ジーコ、公約破りの3バック</a><img src="http://img.yahoo.co.jp/images/new2.gif" width=28 height=11 alt="[new]" border=0></small></td></tr><tr><td colspan=2><small>・<a href="http://dailynews.yahoo.co.jp/fc/sports/japanese_major/">ヤ軍、長谷川争奪戦から撤退</a></small></td></tr><tr><td colspan=2><small>・<a href="http://dailynews.yahoo.co.jp/fc/entertainment/johnnys/">レコ大、SMAP受賞辞退のなぜ</a></small></td></tr><!-- Topix end -->
EOF;
//pregの場合
$start_time = getmicrotime();
for($i = 0; $i < WORK_TIME; $i++){
    preg_match(REGEX, $to_search, $catch);
}
$preg_time = sprintf("%.4f", getmicrotime() - $start_time);

//eregの場合
$start_time = getmicrotime();
for($i = 0; $i < WORK_TIME; $i++){
    ereg(REGEX, $to_search, $catch);
}
$ereg_time = sprintf("%.4f", getmicrotime() - $start_time);
?>
<html>
<head><title>pregとeregの比較</title></head>
<body>
検索対象となる文字列:<?php echo(nl2br(htmlspecialchars($to_search)));?>
<hr>
検索した正規表現:<?php echo(htmlspecialchars(REGEX));?><br>
実施した検索回数:<?php echo(WORK_TIME);?><br>
<hr>
preg_matchの結果:<?php echo($preg_time);?>秒<br>
eregの結果:<?php echo($ereg_time);?>秒<br>
</body>
</html>
タイトルとURLをコピーしました