PHPの正規表現内の名前付きキャプチャグループ
正規表現内でキャプチャグループを使う方法を思い出してみましょう:
<?php
$res = preg_replace('#([a-z])\1#', '!', $str);
?>
キャプチャグループに番号ではなく名前でアクセスした方が便利な状況があります。 そのためには、キャプチャグループに名前を付ける必要があります:
<?php
$res = preg_replace('#(?<letter>[a-z])#', '!', $str);
?>
これで、\k<name> という構文を使って、このキャプチャグループにアクセスできます:
<?php
$res = preg_replace('#(?<letter>[a-z])\k<letter>#', '!', $str);
?>
説明した名前付きキャプチャグループには、他にもいくつかの代替構文があります:(?P=name)、
\k'name'、\k{name}。
次の文字列が与えられます:
<?php
$str = '12:59:59 12:59:12 09:45:09';
?>
時間(時)と秒が一致する全ての時刻部分文字列を見つけてください。