HOWTO · PHP

PHP での文字列の置換

この記事では、PHP で文字列の一部を置換する方法を紹介します。str_replace()関数も含まれています。

このページの内容

PHP文字列の一部を置換するには、str_replace()を使います。文字列をそのまま検索し、一致した部分を置換した対象を返します。通常のテキスト変換に使えますが、信頼できない入力の検証やサニタイズは行いません。

PHP文字列のテキストを置換するには str_replace() を使う

この関数には、検索するテキスト、置換後のテキスト、検索対象となる文字列または配列を渡します。一致判定はリテラルです。たとえば、ドル記号も検索対象となる通常の文字として扱われます。PHPのダブルクォート文字列では、\"$\"は慎重に記述してください。$は変数展開を始めるためです。'$'のようなシングルクォート文字列なら、ドル記号をそのまま表せます。

次の例を実行してください。

このセクションのコードと表示されるラベルや出力は英語のままです。

<?php
$subject = 'Hello World!';
echo str_replace('World', 'PHP', $subject) . PHP_EOL;
Hello PHP!

PHP_EOLは、表示する行の末尾にプラットフォームの改行文字を付けます。

ドル記号を置換するには、検索値に'$'を渡し、置換値に'USD 'のような文字列を指定します。この関数自体では$を特別にエスケープする必要はありません。値はPHPの文字列リテラルの引用符の規則で決まります。

引数、戻り値、置換回数を理解する

必須引数は$search、$replace、$subjectです。$searchは検索するリテラルテキスト、$replaceはその箇所に入れるテキスト、$subjectは処理する文字列または文字列の配列です。対象が文字列なら変更後の文字列を、配列なら変更後の文字列を格納した配列を返します。一致する箇所がなければ、対象は変更されません。

省略可能な4番目の引数$countは、参照渡しで指定します。PHPは対象全体で行った置換の合計数をこの変数に設定します。回数が必要な場合は、渡す前に変数を初期化してください。この値は呼び出しの出力であり、置換回数の上限ではありません。

たとえば、str_replace('cat', 'dog', 'cat and cat', $count)はdog and dogを返し、$countを2に設定します。これは構文を示す例であり、実行結果として示したものではありません。

配列で複数の値を置換する

$searchと$replaceに配列を渡すと、1回の呼び出しで対応する置換を複数適用できます。検索値と置換値は、同じ位置にある要素どうしが組になります。たとえば、次の式は文中の2つの単語を置き換えます。

str_replace(['PHP', 'great'], ['Python', 'useful'], 'PHP is great')

戻り値はPython is usefulです。PHPは配列の組を順番に適用するため、置換によって追加されたテキストが、後続の検索値に一致することがあります。それぞれの置換を元のテキストだけに基づいて行いたい場合は、重複する組を避けるか、その入力形式に対応したパーサーを使ってください。

大文字と小文字を区別する一致と区別しない一致を扱う

str_replace()は大文字と小文字を区別します。検索文字列が'world'の場合、'World'には一致しません。大文字と小文字を区別せずに検索するには、str_ireplace()を使います。たとえば、str_ireplace('world', 'PHP', 'Hello World!')はHello PHP!を返します。大文字と小文字が異なる箇所も置換されるため、その動作が意図されている場合にだけ、区別しない関数を選んでください。