Անվանված կապսուլներ 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

Գրեք ֆունկցիա, որն արդյունքների զանգվածում կջնջի բոլոր համարակալված կապսուլները՝ թողնելով միայն անվանվածները։