Elnevezett zsebek a PHP reguláris kifejezéseiben

Tegyük fel, hogy a preg_match segítségével egy dátumot szeretnénk felbontani napra, hónapra és évre. Használjunk ehhez zsebeket:

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

Amint láthatod, az eredmény egy tömb, amelynek nulladik eleme a teljes dátum, az elsőben - az év, a másodikban - a hónap, a harmadikban - a nap lesz.

Időnként azonban kényelmesebb lenne a zsebek tartalmát asszociatív tömbként kapni. Vagyis a mi esetünkben jó lenne ilyen tömböt kapni:

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

Ehhez a reguláris kifejezésekben létezik egy speciális szintaxis. Íme: (?<name>pattern), ahol pattern - maga a reguláris kifejezés, name pedig a zseb neve.

Írjuk át a dátumra vonatkozó reguláris kifejezésünket elnevezett zsebekkel:

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

Ennek eredményeképpen egy asszociatív tömböt kapunk, amelyben a kulcsok a zsebek nevei, az értékek pedig az, ami beléjük került:

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

Valójában az eredménytömbben a zsebek értékei mind név, mind sorszám alapján elérhetők lesznek. Vagyis például az év elérhető lesz a 'year' kulccsal és a 1 számmal, a hónap - a 'month' kulccsal és a 2 számmal, és így tovább:

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

Az leírt elnevezett zsebeknek van még néhány alternatív szintaxisuk: (?P<name>pattern) és (?'name'pattern).

Задание 1

Adott egy időt tartalmazó sztring:

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

Helyezd az órákat, perceket és másodperceket külön elnevezett zsebekbe.

Задание 2

Írj egy függvényt, amely az eredménytömbből eltávolítja az összes számozott zsebet, meghagyva csak az elnevezetteket.