【PHP】正規表現で置換できない。ereg_replaceとpreg_replaceの記述の違い。

マニュアルどおりやった(つもりだった)んだけどなぜか正規表現の置換がうまく行われない。

記述したのはこれ↓

--------------------------------------------------------------
<?php
$moji ="123456789";
$moji = ereg_replace("/^123/", "aaa",$moji);

echo $moji;
?>
--------------------------------------------------------------

$mojiから先頭の「123」を「aaa」に置き換えるというもの。
期待した結果は「aaa456789」なんだけど、実際の結果は「123456789」。変化無し。マッチしていない。

でいろいろ試行錯誤した結果、単純なミスに気付く。

PHPで正規表現を用いた置換を行う場合は、次の二つの関数がある。

・ereg_replace
・preg_replace

どちらも同じ仕事をするので記述にも違いがないと勝手に思っていたが、そうでないと判明。

正しい記述例
・ereg_replace("パターン", "置換文字",置換前の文字列);
・preg_replace("/パターン/", "置換文字",置換前の文字列);

つまりpreg_replaceの第一引数はパターンを//で囲む必要があるが、ereg_replaceは//で囲む必要がない。

なので最初の失敗は//を取り除くことで解決する

ereg_replace("^123", "aaa",$moji);

出力結果 aaa456789

ただしereg_replaceは将来的になくなる関数らしいので、今後はpreg_replaceを使っていく。