数字のみの郵便番号にハイフンを足すときは正規表現か否か

まあ、否なんですけど

単純な文字列操作に正規表現エンジンを立ち上げる必要は無い感じがプンプンするので、アレなんですが気まぐれに10万回転時のパフォーマンスを比べてみました。

function use_preg_replace($zip)
{
    return preg_replace('/^(\d{3})(\d{4})$/', '$1-$2', $zip);
}

function use_substr($zip)
{
    return substr($zip, 0, 3).'-'.substr($zip, 3);
}

// 10万回転ごとのタイムを溜める
$stack = array();

$t = new timer();

for ( $j = 0; $j < 10; $j++ ) {
    $t->start();
    for ( $i = 0; $i<100000; $i++ ) {
        use_substr('4870033');
    }
    $stack[] = $t->end();
}

var_dump(array_sum($stack) / count($stack));
var_dump($stack);

こんな感じで10万回転を10回繰り返して、各回の所用時間と、それらの平均をとってみました。くだんねー。

結果、substrのほうが40%高速

// preg_replaceをつかったとき
float(0.203863)
array(10) {
  [0]=> float(0.20533)
  [1]=> float(0.2094)
  [2]=> float(0.21387)
  [3]=> float(0.1964)
  [4]=> float(0.1946)
  [5]=> float(0.20371)
  [6]=> float(0.20579)
  [7]=> float(0.19904)
  [8]=> float(0.20849)
  [9]=> float(0.202)
}

// substrをつかったとき
float(0.12153)
array(10) {
  [0]=> float(0.12301)
  [1]=> float(0.12053)
  [2]=> float(0.12054)
  [3]=> float(0.11978)
  [4]=> float(0.12328)
  [5]=> float(0.12056)
  [6]=> float(0.11979)
  [7]=> float(0.12612)
  [8]=> float(0.12202)
  [9]=> float(0.11967)
}

preg_replace使用時 : ave 0.203863s

substr使用時 : ave 0.12153s

substrを使うほうが、およそ40%高速ですね! 正規表現のコストを意識するための戒めということで。単純な文字列操作・照合ぐらいなら正規表現なんて使わなくても何とかなることを忘れませんよーに!


Author

ahomuAyumu Sato

overflow, Inc.VPoE

東京資本で生きる名古屋の鳥類

Web 技術、組織開発、趣味など雑多なブログ。技術の話題は zenn にも分散して投稿しています。

Bio: aho.mu
X: @ahomu
Zenn: ahomu
GitHub: ahomu

Related

Latest

Archives

Tags

Search