タイトル: 文字の置換
SEOタイトル: PHP 文字列置換完全ガイド — str_replace / preg_replace 使い分け
| この記事の要点 |
|
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) が安全。