PHPでの文字列を一度だけ置換する方法について説明します。
文字列置換でよく使用される関数としてstr_replace関数があります。しかしstr_replace関数は対象文字列のすべてを置換するので、用途によっては使用できない場合があります。
<?php
$str = "日本、東京、大阪、名古屋、日本";
$str = str_replace('日本', 'アメリカ', $str);
echo $str;
?>
上記の例が示すように「日本、東京、大阪、名古屋、日本」という文字列の最初の「日本」という文字を「アメリカ」に置換したい場合も、str_replace関数を使うと「アメリカ、東京、大阪、名古屋、アメリカ」のように全て置換されてしまいます。
preg_replace関数
今回のテーマのように対象文字列の任意の文字を一回だけ置換したいという場合、str_replace関数を直接使うことができません。その場合preg_replace関数を使用します。
preg_replace — 正規表現検索および置換を行う
preg_replace(
string|array $pattern,
string|array $replacement,
string|array $subject,
int $limit = -1,
int &$count = null
): string|array|null
第一パラメータに正規表現のパターン
第二パラメータに置換後の文字列
第三パラメータに置換対象文字列
第四パラメータに置換回数
第四パラメータを省くとすべて置換されますが、今回はここに「1」をセットします。
使用例
早速使用例を見ていきましょう。
先ほどのstr_replace関数の続きに処理を追記しています。
<?php
$str = "日本、東京、大阪、名古屋、日本";
$str_1 = str_replace('日本', 'アメリカ', $str);
echo 'str_replace<br>';
echo $str_1.'<br>';
$str_2 = preg_replace("/日本/", "アメリカ", $str, 1);
echo 'preg_replace<br>';
echo $str_2.'<br>';
?>
str_replace
アメリカ、東京、大阪、名古屋、アメリカ
preg_replace
アメリカ、東京、大阪、名古屋、日本
preg_replace関数を使うと最初の文字だけ置換されました。