PHP'деги регулярдуу формулалардагы аттанган кармандар

preg_match колдонуп, датаны күн, ай жана жылга бөлүүнү каалайлы деп коёлу. Бул үчүн кармандарды колдонолу:

php<?php
  $str = '2025-10-29';
  $reg = '#(\d{4})-(\d{2})-(\d{2})#';
  
  preg_match($reg, $str, $match);
  var_dump($match); // чыгарат ['2025-10-29', '2025', '10', '29']
?>

Көрүп тургандарыңыздай, натыйжада биз массив алабыз, алдыңкы элементте бүт дата, биринчисинде - жыл, экинчисинде - ай, үчүнчүсүндө - күн болот.

Бирок, кээде кармандардын мазмунун ассоциативдүү массив түрүндө алуу ыңгайлуу болмок. Башкача айтканда, биздин учурда мындай массив алуу жакшы болмок:

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

Бул үчүн регулярдуу формулаларда атайын синтаксис бар. Мына ушул: (?<name>pattern), мында pattern - бул регулярдуу формула, ал эми name - бул кармандын аты.

Келгиле, дата үчүн биздин регулярдуу формулабызды атталган кармандар аркылуу кайра жазалы:

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

Натыйжада бизде ассоциативдүү массив пайда болот, ачкычтары кармандардын аттары болуп, маанилери - аларга түшкөн нерселер болот:

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

Чынында эле, натыйжа массивинде кармандардын маанилери ат боюнча да, тартип номеру боюнча да жеткиликтүү болот. Башкача айтканда, мисалы, жыл 'year' ачкычы боюнча жана 1 номеру боюнча, ай - 'month' ачкычы боюнча жана 2 номеру боюнча жеткиликтүү болот жана ушундай:

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

Сүрөттөлгөн атталган кармандардагы дагы бир нече альтернативдүү синтаксистер бар: (?P<name>pattern) жана (?'name'pattern).

Задание 1

Убакыт менен берилген сап:

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

Сагат, мүнөт жана секундаларды бөлүк атталган кармандарга салыңыз.

Задание 2

Натыйжа массивиндеги бардык номерленген кармандарды өчүрүп, атталган кармандарды гана калтыра турган функция жазыңыз.