13.

PHP 文字列置換完全ガイド — str_replace / preg_replace 使い分け

編集
この記事の要点
  • str_replace($search, $replace, $subject) が最も基本。検索文字列と置換後文字列を渡すだけ
  • 配列渡し可: str_replace(["a", "b"], ["X", "Y"], $s) で複数置換を一度に
  • 大文字小文字を無視するなら str_ireplace、正規表現が必要なら preg_replace
  • preg_replace_callback でマッチ毎にコールバック実行(動的置換)
  • 位置指定なら substr_replace、文字単位の対応表なら strtr
  • Laravel では Str::replace / Str::replaceFirst / Str::replaceLast が便利
  • よくあるバグ: 改行コード (CRLF vs LF) / マルチバイトのエンコーディング / 配列順序依存でドミノ置換

str_replace の基本

PHP で最もよく使う置換関数。検索文字列を置換文字列に変えた新しい文字列を返します。元の文字列は変更されない(戻り値で受け取る)。

関数比較表

関数機能大文字小文字正規表現
str_replace単純置換区別する×
str_ireplace単純置換区別しない×
preg_replace正規表現置換パターン依存
preg_replace_callbackマッチ毎にコールバックパターン依存
substr_replace位置指定置換×
strtr文字 / ペア対応表で置換区別する×

str_ireplace: 大文字小文字を無視

preg_replace: 正規表現置換

]+>/', '', '

Hello World

'); echo $s; // Hello World

preg_replace_callback: マッチ毎に動的処理

substr_replace: 位置指定置換

strtr: 文字対応表 / ペア辞書で置換

 'dogs',
    'dogs' => 'cats',
]);
// → I like dogs and cats   (str_replace だと両方 'cats' になる)

// HTML エスケープを自前実装するなら
echo strtr('
', ['<' => '<', '>' => '>']); // → <div>

Laravel Str ヘルパ

replaceMatches('/foo/', fn ($m) => strtoupper($m[0]));
// → FOO bar

よくあるバグと対策

1. 配列順序依存のドミノ置換

 'dog', 'dog' => 'cat']);
// → dog and cat

2. 改行コードの混在

3. マルチバイト文字 / UTF-8

性能の目安

  • str_replace > strtr > preg_replace: 単純置換なら str_replace が最速
  • 大量データで複数パターンを置換するなら、まとめて strtr の連想配列がベスト
  • 正規表現は遅い → 静的な文字列で済むなら使わない

FAQ

Q: 最初の 1 回だけ置換したい
A: preg_replace('/foo/', 'bar', $s, 1) の第 4 引数で回数指定、または Str::replaceFirst

Q: 大文字小文字無視で正規表現
A: パターンに i 修飾子: preg_replace('/foo/i', 'bar', $s)

Q: 全角空白を半角に
A: mb_convert_kana($s, "s", "UTF-8") が確実。str_replace でもできますが意図が伝わりにくい。

Q: HTML タグだけ削除したい
A: 自前 preg_replace より strip_tags($s) が安全。

編集
Post Share
子ページ

子ページはありません

同階層のページ
  1. 記述方法
  2. コメント
  3. 変数の宣言
  4. 関数
  5. 演算子
  6. 条件文
  7. 配列
  8. 連想配列
  9. ループ処理
  10. 非同期処理
  11. 同期処理
  12. 確認ウィンドウを表示する方法
  13. 文字の置換
  14. base urlを取得する方法
  15. formのsubmit前にjavascriptを呼び出す方法
  16. undefinedのイコール判定
  17. Javascript のみで form を post で submit する方法