PHP-də Adlandırılmış Qruplar

Tutaq ki, preg_match ilə tarixi gün, ay və ilə ayırmaq istəyirik. Bunun üçün qruplardan istifadə edək:

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

Gördüyünüz kimi, nəticədə sıfırıncı elementdə bütün tarixin, birincidə - ilin, ikincidə - ayın, üçüncüdə - günün olduğu bir massiv alırıq.

Bəzən, however, qrupların məzmununu assosiativ massiv şəklində almaq rahat olardı. Yəni bizim vəziyyətimizdə belə bir massiv almaq yaxşı olardı:

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

Bunun üçün regex ifadələrində xüsusi sintaksis mövcuddur. Budur: (?<name>pattern), burada pattern - regex ifadəsi, name ise qrupun adıdır.

Gəlin tarix üçün regex ifadəmizi adlandırılmış qruplar vasitəsilə yenidən yazaq:

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

Nəticədə, açarı qrupların adları, dəyərləri isə onların tutduğu məzmun olan assosiativ massiv alınacaq:

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

Əslində, nəticə massivində qrupların dəyərləri həm ada, həm də sıra nömrəsinə görə əlçatan olacaq. Yəni, məsələn, il 'year' açarı və 1 nömrəsi ilə, ay - 'month' açarı və 2 nömrəsi ilə və s. əlçatan olacaq:

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

Təsvir olunan adlandırılmış qrupların bir neçə alternativ sintaksisi də var: (?P<name>pattern) və (?'name'pattern).

Задание 1

Zamanı olan bir sətir verilmişdir:

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

Saati, dəqiqəni və saniyəni ayrı-ayrı adlandırılmış qruplara yerləşdirin.

Задание 2

Nəticə massivində nömrələnmiş bütün qrupları silən, yalnız adlandırılmışları saxlayan bir funksiya yazın.