PHPの正規表現置換におけるキャプチャグループ

関数preg_replaceを使用する際、 正規表現で何かをキャプチャグループに入れると、 置換文字列内で、ドル記号$とグループ番号を書くことで、 そのキャプチャグループの内容を挿入できます。 例えば、$0 - 0番目のグループ(全体にマッチした部分)、 $1 - 1番目のグループ、$2 - 2番目のグループ といった具合です。

これがなぜ必要で、どのように使うのか、 例を見てみましょう。

例

すべての数値を探し、それらを中括弧で囲まれた 同じ数値に置き換えてみましょう。これを行うには、 見つかったすべての数値を、中括弧で囲まれた 同じ数値に置き換えます:

php<?php
  $str = '1 23 456 xax';
  $res = preg_replace('#(\d+)#', '{$1}', $str);
?>

結果、変数には次の内容が格納されます:

php'{1} {23} {456} xax'

例

'x'で囲まれた数値のすべての文字列を見つけ、 それらの数値を、'!'記号で囲まれた 同じ数値に置き換えてみましょう:

php<?php
  $str = 'x1x x23x x456x xax';
  $res = preg_replace('#x(\d+)x#', '!$1!', $str);
?>

結果、変数には次の内容が格納されます:

php'!1! !23! !456! xax'

例

次の問題を解決してみましょう: 'aaa@bbb'という形式の文字列があります - 文字、次にアットマーク、次に文字です。 '@'の前後の文字を入れ替える必要があります。 実装してみましょう:

php<?php
  $str = 'aaa@bbb ccc@ddd';
  $res = preg_replace('#([a-z]+)@([a-z]+)#', '$2@$1', $str);
?>

結果、変数には次の内容が格納されます:

php'bbb@aaa ddd@ccc'

実践問題

Задание 1

次の文字列があります:

php<?php
  $str = '12 34 56 78';
?>

すべての2桁の数字の桁を入れ替えてください。

Задание 2

日付の文字列があります:

php<?php
  $str = '31.12.2025';
?>

この日付を'2025.12.31'の形式に変換してください。