Именованные карманы внутри регулярки PHP

Всмомним, как мы пользовались карманами в самом регулярном выражении:

<?php $res = preg_replace('#([a-z])\1#', '!', $str); ?>

Иногда бывают ситуации, когда удобнее обращаться к карману не по его номеру, а по имени. Для этого нам нужно дать карману имя:

<?php $res = preg_replace('#(?<letter>[a-z])#', '!', $str); ?>

Теперь мы можем обратиться к этому карману через синтаксис \g<name>, вот так:

<?php $res = preg_replace('#(?<letter>[a-z])\g<letter>#', '!', $str); ?>

Дана строка:

<?php $str = '12:59:59 12:59:12 09:45:09'; ?>

Найдите все подстроки со временем, в которых час совпадает с секундами.

Альтернативный синтаксис

Описанные именованные карманы имеют еще несколько альтернативных синтаксисов: (?P=name), \g{name}, \g'name', \k<name>, \k'name', \k{name}.