PHPの正規表現置換におけるキャプチャグループ
関数preg_replaceを使用する際、
正規表現で何かをキャプチャグループに入れると、
置換文字列内で、ドル記号$とグループ番号を書くことで、
そのキャプチャグループの内容を挿入できます。
例えば、$0 - 0番目のグループ(全体にマッチした部分)、
$1 - 1番目のグループ、$2 - 2番目のグループ
といった具合です。
これがなぜ必要で、どのように使うのか、 例を見てみましょう。
例
すべての数値を探し、それらを中括弧で囲まれた 同じ数値に置き換えてみましょう。これを行うには、 見つかったすべての数値を、中括弧で囲まれた 同じ数値に置き換えます:
<?php
$str = '1 23 456 xax';
$res = preg_replace('#(\d+)#', '{$1}', $str);
?>
結果、変数には次の内容が格納されます:
'{1} {23} {456} xax'
例
'x'で囲まれた数値のすべての文字列を見つけ、
それらの数値を、'!'記号で囲まれた
同じ数値に置き換えてみましょう:
<?php
$str = 'x1x x23x x456x xax';
$res = preg_replace('#x(\d+)x#', '!$1!', $str);
?>
結果、変数には次の内容が格納されます:
'!1! !23! !456! xax'
例
次の問題を解決してみましょう:
'aaa@bbb'という形式の文字列があります
- 文字、次にアットマーク、次に文字です。
'@'の前後の文字を入れ替える必要があります。
実装してみましょう:
<?php
$str = 'aaa@bbb ccc@ddd';
$res = preg_replace('#([a-z]+)@([a-z]+)#', '$2@$1', $str);
?>
結果、変数には次の内容が格納されます:
'bbb@aaa ddd@ccc'
実践問題
次の文字列があります:
<?php
$str = '12 34 56 78';
?>
すべての2桁の数字の桁を入れ替えてください。
日付の文字列があります:
<?php
$str = '31.12.2025';
?>
この日付を'2025.12.31'の形式に変換してください。