Poches nommées dans les expressions régulières PHP

Supposons qu'avec preg_match nous voulions décomposer une date en jour, mois et année. Utilisons pour cela des poches :

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

Comme vous le voyez, dans le résultat nous obtenons un tableau, dans lequel dans l'élément zéro sera la date entière, dans le premier - l'année, dans le deuxième - le mois, dans le troisième - le jour.

Parfois, cependant, il serait pratique d'obtenir le contenu des poches sous forme de tableau associatif. C'est-à-dire dans notre cas, il serait bien d'obtenir un tableau comme celui-ci :

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

Pour cela, il existe une syntaxe spéciale dans les expressions régulières. La voici : (?<name>pattern), où pattern - est l'expression régulière, et name - est le nom de la poche.

Réécrivons notre expression régulière pour la date avec des poches nommées :

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

En conséquence, nous obtiendrons un tableau associatif, dans lequel les clés seront les noms des poches, et les valeurs - ce qui y est entré :

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

En réalité, dans le tableau de résultat, les valeurs des poches seront accessibles à la fois par leur nom et par leur numéro d'ordre. C'est-à-dire, par exemple, l'année sera accessible par la clé 'year' et par le numéro 1, le mois - par la clé 'month' et par le numéro 2 et ainsi de suite :

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

Les poches nommées décrites ont encore quelques syntaxes alternatives : (?P<name>pattern) et (?'name'pattern).

Задание 1

Une chaîne avec l'heure est donnée :

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

Placez les heures, les minutes et les secondes dans des poches nommées distinctes.

Задание 2

Écrivez une fonction qui, dans le tableau de résultat, supprimera toutes les poches numérotées, en ne laissant que les poches nommées.