# Именованные карманы в регулярках PHP

Пусть с помощью `preg_match` мы хотим разбить дату на день, месяц и год. Используем для этого карманы:

`<?php $str = '2025-10-29'; $reg = '#(\d{4})-(\d{2})-(\d{2})#'; preg_match($reg, $str, $match); var_dump($match); // выведет ['2025-10-29', '2025', '10', '29'] ?>`

Как вы видите, в результате мы получаем массив, в котором в нулевом элементе будет вся дата, в первом - год, во втором - месяц, в третьем - день.

Иногда, однако, было бы удобно получить содержимое карманов в виде ассоциативного массива. То есть в нашем случае было бы неплохо получить вот такой массив:

`[ 'year' => '2025', 'month' => '10', 'day' => '29' ]`

Для этого в регулярках существует специальный синтаксис. Вот он: `(?<name>pattern)`, где `pattern` - это регулярка, а `name` - это имя кармана.

Давайте перепишем нашу регулярку для даты через именованные карманы:

`<?php $str = '2025-10-29'; $reg = '#(?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2})#'; preg_match($reg, $str, $match); var_dump($match); ?>`

В результате у нас получится ассоциативный массив, в котором ключами будут имена карманов, а значениями - то, что в них попало:

`[ 'year' => '2025', 'month' => '10', 'day' => '29', ]`

На самом деле в массиве с результатом значения карманов будут доступны как по имени, так и по порядковому номеру. То есть, к примеру, год будет доступен по ключу `'year'` и по номеру `1`, месяц - по ключу `'month'` и по номеру `2` и так далее:

`[ 'year' => '2025', 'month' => '10', 'day' => '29', 1 => '2025', 2 => '10', 3 => '29' ]`

Описанные именованные карманы имеют еще несколько альтернативных синтаксисов: `(?P<name>pattern)` и `(?'name'pattern)`.

Дана строка со временем:

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

Положите часы, минуты и секунды в отдельные именованные карманы.

Напишите функцию, которая в массиве с результатом удалит все нумерованные карманы, оставив только именованные.

←→
↑