【PHP】正規表現で文字列を置換する関数preg_replace()

PHPで、正規表現で条件を指定して文字列の置換をしたい場合、
PHPには、preg_replace()という関数が準備されています。

preg_replace(引数1, 引数2, 引数3, 引数4(省略可))
  • 引数1…検索するパターン。正規表現で指定する。
  • 引数2…置換後のテキストを指定する。
  • 引数3…置換前の元テキスト
  • 引数4…置換を行う最大回数(省略可)

preg_replace()で文字列を置換してみる

まずは、試しにpreg_replace()を使って文字列を置換してみる。

文字列「進撃の巨乳」を「進撃の巨人」に修正したい為、
「巨乳」→「巨人」に置換してみる。

// 変数代入
$string = '進撃の巨乳';
$pattern = '/巨乳/';
$replacement = '巨人';

// ①置換前
echo $string;

// ②置換後
echo preg_replace($pattern, $replacement, $string);
  • ①置換前:進撃の巨乳
  • ②置換後:進撃の巨人

preg_replace()は指定文字列すべてが対象

引数4で置換を行う回数を指定しない限りは、
全ての指定文字列が置換の対象となります。

$string = '巨乳好きな俺の彼女も、巨乳な彼女の巨乳の友達も「進撃の巨乳」が好き。';
$pattern = '/巨乳/';
$replacement = '巨人';

// ①置換前
echo $string;

// ②置換後
echo preg_replace($pattern, $replacement, $string);
  • ①置換前:巨乳好きな俺の彼女も、巨乳な彼女の巨乳の友達も「進撃の巨乳」が好き。
  • ②置換後:巨人好きな俺の彼女も、巨人な彼女の巨人の友達も「進撃の巨人」が好き。

preg_replace() 正規表現で置換文字列の条件を指定

preg_replace()は指定文字列すべてが対象となってしまう為、
特定の文字列のみ置換の対象としたい場合は、正規表現で条件を指定します。

例えば、”巨乳好きな俺の彼女も、巨乳な彼女の巨乳の友達も「進撃の巨乳」が好き。”
という文字列のうち、行の最初の「巨乳」のみを「巨人」に変更したい場合の例。

“行の最初に一致する文字列”という条件指定’^'を使います。

例えば今回の文字列の”行の最初に一致する文字列”を指定したい場合は、
‘/^巨乳/’と記述します。

$string = '巨乳好きな俺の彼女も、巨乳な彼女の巨乳の友達も「進撃の巨乳」が好き。';
$pattern = '/^巨乳/';
$replacement = '巨人';

// ①置換前
echo $string;

// ②置換後
echo preg_replace($pattern, $replacement, $string);
  • ①置換前:巨乳好きな俺の彼女も、巨乳な彼女の巨乳の友達も「進撃の巨乳」が好き。
  • ②置換後:巨人好きな俺の彼女も、巨乳な彼女の巨乳の友達も「進撃の巨乳」が好き。

preg_replace()は正規表現で(○○~始まる)置換文字列を指定

たくさんの文字列”巨乳”がある中から、
“進撃の巨乳”のみ”進撃の巨人”に置換したい場合の例。

単純に”進撃の巨乳”→”進撃の巨人”に置換してもよいのですが、それでは面白くないので、
preg_replace()で準備されている特殊機能を使ってみます。

preg_replace()の引数2では$n形式で()内の文字列をサブパターンとして持つ事ができます。
1つ目の()は$1、2つ目の()は$2といった感じです。

$string = '巨乳好きな俺の彼女も、巨乳な彼女の巨乳の友達も「進撃の巨乳」が好き。進撃の巨乳も巨乳もだぁいすき!';
$pattern = '/(進撃の)巨乳/';
$replacement = '$1巨人';

// ①置換前
echo $string;

// ②置換後
echo preg_replace($pattern, $replacement, $string);
  • ①置換前:巨乳好きな俺の彼女も、巨乳な彼女の巨乳の友達も「進撃の巨乳」が好き。進撃の巨乳も巨乳もだぁいすき!
  • ②置換後:巨乳好きな俺の彼女も、巨乳な彼女の巨乳の友達も「進撃の巨人」が好き。進撃の巨人も巨乳もだぁいすき!

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>