Nosauktie kapteņi PHP regulārajās izteiksmēs

Pieņemsim, ka ar preg_match palīdzību mēs vēlamies sadalīt datumu dienā, mēnesī un gadā. Izmantosim šim nolūkam kapteņus:

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

Kā jūs redzat, rezultātā mēs iegūstam masīvu, kurā nulles elementā būs viss datums, pirmajā - gads, otrajā - mēnesis, trešajā - diena.

Dažreiz tomēr būtu ērti iegūt kapteņu saturu asociatīvā masīva veidā. Tas ir, mūsu gadījumā būtu labi iegūt šeitādu masīvu:

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

Šim nolūkam regulārajās izteiksmēs pastāv speciāls sintakse. Lūk, tā: (?<name>pattern), kur pattern - ir regulārā izteiksme, bet name - ir kapteņa nosaukums.

Pārrakstīsim mūsu datuma regulāro izteiksmi izmantojot nosauktos kapteņus:

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

Rezultātā mums izveidosies asociatīvs masīvs, kurā atslēgas būs kapteņu nosaukumi, bet vērtības - tas, kas tajos iekrita:

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

Patiesībā rezultātu masīvā kapteņu vērtības būs pieejamas gan pēc nosaukuma, gan arī pēc kārtas numura. Tas ir, piemēram, gads būs pieejams pēc atslēgas 'year' un pēc numura 1, mēnesis - pēc atslēgas 'month' un pēc numura 2 un tā tālāk:

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

Aprakstītajiem nosauktajiem kapteņiem ir vēl dažas alternatīvas sintakses: (?P<name>pattern) un (?'name'pattern).

Задание 1

Dota virkne ar laiku:

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

Ievietojiet stundas, minūtes un sekundes atsevišķos nosauktos kapteņos.

Задание 2

Uzrakstiet funkciju, kas masīvā ar rezultātu izdzēsīs visus numurētos kapteņus, atstājot tikai nosauktos.