Namngivna capture-grupper i PHP regex

Låt oss säga att vi med preg_match vill dela upp ett datum på dag, månad och år. Vi använder capture-grupper för detta:

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

Som du ser får vi ett array som resultat, där element noll innehåller hela datumet, element ett - året, element två - månaden, element tre - dagen.

Ibland vore det dock bekvämt att få innehållet i capture-grupperna som en associativ array. Det vill säga i vårt fall vore det bra att få följande array:

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

För detta finns en speciell syntax i regex. Här är den: (?<name>pattern), där pattern är regex-mönstret, och name är namnet på capture-gruppen.

Låt oss skriva om vårt datum-regex med namngivna capture-grupper:

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

Som ett resultat kommer vi att få en associativ array, där nycklarna är namnen på capture-grupperna, och värdena är det som hamnade i dem:

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

I verkligheten kommer värdena från capture-grupperna i resultatarrayen att vara tillgängliga både med namn och med ordningsnummer. Det vill säga, till exempel, kommer året att vara tillgängligt med nyckeln 'year' och med numret 1, månaden - med nyckeln 'month' och med numret 2, och så vidare:

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

De beskrivna namngivna capture-grupperna har ytterligare några alternativa syntaxer: (?P<name>pattern) och (?'name'pattern).

Задание 1

Given en sträng med en tid:

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

Lägg timmar, minuter och sekunder i separata namngivna capture-grupper.

Задание 2

Skriv en funktion som i arrayen med resultatet raderar alla numrerade capture-grupper, och endast lämnar kvar de namngivna.