この記事について
| 環境 | 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を使っていく。
