文字列置換というとereg_replaceとかpreg_replaceで正規表現を使って置換したりする方法がよくありますが、ereg_replaceが非推奨となってるのでちょっとメモ。
何がしたいのか
まずpreg_replaceで気になったのが、複数の正規表現のパターンが合った場合はどうすればいいんだろうという点。
URLを取得したときに最初と最後の/(スラッシュ)を削除して分割する必要があったのでpreg_replaceを使うことになったので試してみる。
preg_replaceで/を削除する
とりあえずは、phpファイルは下記のように記述した。
$url="/first/second/third/forth/";
echo "/を削除する前: ".$url."
";
//正規表現のパターンを配列で指定する
$patterns=array(
"/\/?$/",
"/^\/*/"
);
//preg_replaceで置換する文字列には何も指定しない
$url=preg_replace($patterns,"",$url);
echo "/を削除した後: ".$url."
";
//explodeで/を基準に分割して出力
$list=explode("/",$url);
foreach($list as $value){
echo "".$value."
";
}
正規表現のパターンを配列で指定する
正規表現のパターンは配列で複数指定できるので、配列を作ってそこにパターンを記述する。
上記の例だと、最後の/(スラッシュ)と最初の/(スラッシュ)を指定している。
preg_replaceで置換
今回はURLの最初と最後の/(スラッシュ)を取り除きたいので、preg_replaceの第2引数の置換する文字列には、””(ダブルコーテーション)のみで指定することで/(スラッシュ)を削除する。
explodeで文字列を分割
URLを/(スラッシュ)を区切り文字列としてexplode関数で分割します。
なぜ、最初と最後の/(スラッシュ)を削除したかというと最初と最後の/(スラッシュ)を削除しないと、explodeで分割した際に配列の最初と最後に空文字が入ってしまうためです。
上記のサンプルコードのpreg_replaceで削除しないでexplodeをしてみれば分かります。