PHPで文字列を置換するには str_replace() と preg_replace() があります。単純な置き換えは str_replace()、パターンを使う高度な置換は preg_replace() が基本です。この記事では、配列でまとめて置換する方法や、その順序依存の落とし穴まで解説します。
この記事の結論:決まった文字列の置換は
str_replace($search, $replace, $subject)、パターン置換は preg_replace($pattern, $replacement, $subject)。配列で複数置換するときは処理順序による上書きに注意します。str_replace()で単純に置換する
検索文字列・置換文字列・対象文字列を渡すと、一致する箇所をすべて置き換えます。
基本の置換
<?php
echo str_replace("World", "PHP", "Hello World!"); // Hello PHP!
大文字・小文字を区別せずに置換したいときは str_ireplace() を使います。
str_ireplace(大小文字を無視)
<?php
echo str_ireplace("WORLD", "PHP", "Hello world"); // Hello PHP
配列でまとめて置換する
検索・置換に配列を渡すと、複数の置換を一度に行えます。インデックスが対応する要素どうしで置き換えられます。
配列で複数置換
<?php $search = ["cat", "dog"]; $replace = ["猫", "犬"]; echo str_replace($search, $replace, "cat and dog"); // 猫 and 犬
配列置換は「順番に」処理されるため、後の置換が前の結果を上書きすることがあります。たとえば
str_replace(["a", "b"], ["b", "c"], "a") は、まず a→b、次にその b を b→c で置換するため、結果は "c" になります(意図とずれやすい)。連鎖して困る場合は、置換順序を工夫するか strtr()(同時置換)を検討します。strtr($str, $pairs) は連想配列で同時置換するため、上記のような連鎖上書きが起きません。相互に絡む置換ではこちらが安全です。preg_replace()でパターン置換する
「数字をすべて〇〇に」「特定の形式を変換」など、パターンで置換するなら正規表現の preg_replace() を使います。
数字をまとめて置換
<?php
echo preg_replace("/\d+/", "many", "I have 4 apples and 3 bananas.");
// I have many apples and many bananas.
正規表現の後方参照を使うと、一致した一部を並べ替えて置換できます。() で囲んだ部分を $1・$2 で参照します。
後方参照で並べ替え
<?php
// 2026-06 → 06/2026
echo preg_replace("/(\d{4})-(\d{2})/", "$2/$1", "2026-06"); // 06/2026
複雑な置換はpreg_replace_callback
「一致した数値を2倍にする」など、置換内容を計算で決めたい場合はpreg_replace_callback() を使います。一致部分を受け取り、戻り値で置き換えます。
preg_replace_callbackで計算置換
<?php
$result = preg_replace_callback("/\d+/", function ($m) {
return $m[0] * 2; // 一致した数値を2倍に
}, "a1 b2 c3");
echo $result; // a2 b4 c6
使い分け
| やりたいこと | 関数 |
|---|---|
| 決まった文字列を置換 | str_replace() |
| 大文字小文字を無視して置換 | str_ireplace() |
| 相互に絡む複数置換を同時に | strtr() |
| パターンで置換 | preg_replace() |
| 置換内容を計算で決める | preg_replace_callback() |
よくある質問(FAQ)
Qstr_replaceとpreg_replaceはどう使い分けますか?
A決まった文字列の置換は
str_replace()(高速・シンプル)、パターン(数字・形式など)での置換は preg_replace() です。正規表現が不要なら str_replace を使う方が速く読みやすくなります。Q配列で置換したら結果がおかしくなりました。
A配列置換は順番に処理されるため、前の置換結果が後の置換でさらに変わることがあります。相互に絡む置換は、順序を工夫するか
strtr()(同時置換)を使ってください。Q一致した一部を並べ替えて置換したいです。
A
preg_replace() の後方参照を使います。パターン側を () で囲み、置換側で $1・$2 として参照します。Q置換内容を条件や計算で決めたいです。
A
preg_replace_callback() を使います。一致部分を関数で受け取り、戻り値で置き換えるため、数値の加工や条件分岐を伴う置換ができます。まとめ
PHPの文字列置換のポイントを整理します。
- 決まった文字列は
str_replace()、パターンはpreg_replace() - 配列置換は順序依存で上書きに注意(同時置換は
strtr()) - 大文字小文字を無視するなら
str_ireplace() - 並べ替えは後方参照
$1・$2 - 計算で決める置換は
preg_replace_callback()
関連として、文字列に特定の文字が含まれるか確認する方法・preg_splitで文字列を分割する方法・文字列を結合する方法もあわせて読むと、PHPの文字列処理に強くなれます。

