Sloturi denumite în expresiile regulate PHP

Să presupunem că folosind preg_match vrem să împărțim o dată în zi, lună și an. Să folosim pentru aceasta sloturi:

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

După cum vedeți, în rezultat obținem un array, în care elementul zero va conține întreaga dată, în primul - anul, în al doilea - luna, în al treilea - ziua.

Uneori, totuși, ar fi convenabil să obținem conținutul sloturilor sub forma unui array asociativ. Adică în cazul nostru ar fi bine să obținem un array ca acesta:

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

Pentru aceasta în expresiile regulate există o sintaxă specială. Iat-o: (?<name>pattern), unde pattern - este expresia regulată, iar name - este numele slotului.

Să rescriem expresia noastră regulată pentru dată cu sloturi denumite:

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

Ca rezultat, vom obține un array asociativ în care cheile vor fi numele sloturilor, iar valorile - ceea ce a fost capturat în ele:

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

De fapt, în array-ul cu rezultat, valorile sloturilor vor fi accesibile atât după nume, cât și după numărul de ordine. Adică, de exemplu, anul va fi accesibil după cheia 'year' și după numărul 1, luna - după cheia 'month' și după numărul 2 și așa mai departe:

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

Sloturile denumite descrise mai au câteva sintexe alternative: (?P<name>pattern) și (?'name'pattern).

Задание 1

Este dat un șir cu ora:

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

Puneți orele, minutele și secundele în sloturi denumite separate.

Задание 2

Scrieți o funcție care în array-ul cu rezultat va șterge toate sloturile numerotate, lăsând doar pe cele denumite.