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

この記事について

環境PHP
目的ereg_replaceでの置換がなぜかマッチしないのを直す
結果ereg_replaceはパターンを//で囲まない。preg_replaceは囲む。//を取り除いて解決

つまずきポイント要約

  • ereg_replaceとpreg_replaceで記述が同じと思い込んでいた
  • 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を使っていく。

関連記事

タイトルとURLをコピーしました