たたかいのきろく。

2022-05-08

PHPで文字列を置換する3つの関数比較「str_replace/preg_replace/mb_ereg_replace」

event_note5月 08, 2022

PHPで文字列の置換をする関数のメモ。

比較

  1. 通常の置換の場合は、str_replace
  2. 正規表現を用いた置換の場合は、preg_replace
  3. 正規表現を用いた置換をマルチバイト文字列に行う場合は、mb_ereg_replace

「str_replace」の使い方

str_replace(

  1. 検索する文字列,
  2. 置き換える文字列,
  3. 置換対象の文字列,
  4. ※置換した箇所の個数を格納する変数 …※未指定OK

);

戻り値は、置換後の文字列。

サンプルコード

$str = str_replace("あ", "★", "あいうえおあいうえお", $count);
echo $str; // $str = いうえおいうえお
echo $count; // $count = 2

「preg_replace」の使い方

preg_replace(

  1. 検索する文字列,
  2. 置き換える文字列,
  3. 置換対象の文字列,
  4. ※置き換えを行う最大回数(-1:制限なし), …※未指定OK
  5. ※置換した箇所の個数を格納する変数 …※未指定OK

);

戻り値は、置換後の文字列。

サンプルコード

$str = preg_replace("(,\s)", "★", "あいうえお,あいうえお, あいうえお, あいうえお", 1, $count);
echo $str; // $str = あいうえお,あいうえお★あいうえお, あいうえお
echo $count; // $count = 1

「半角カンマ+半角空白 "(,\s)" 」を「★」に置換しています。

4番目の引数に「1」を指定しているので、最初にマッチした1箇所のみが置換されています。

「mb_ereg_replace」の使い方

mb_ereg_replace(

  1. 検索する文字列,
  2. 置き換える文字列,
  3. 置換対象の文字列,
  4. ※検索オプション(1文字、複数指定OK), …※未指定OK

);

戻り値は、置換後の文字列。

todo: 検索オプションの詳細を調べる。

サンプルコード

$str = mb_ereg_replace("[^ -~]", "★", "abcあABCい123");
echo $str; // $str = abc★ABC★1★3

文字列「abcあABCい123」がマルチバイト文字列の場合の置換です。

半角英数記号以外の文字を「★」に置換しています。

「あ」「い」「2」が全角のため置換されています。

todo: マルチバイト用の置換……文字コードむずかしい。