Kantong Bernama dalam Regex PHP

Misalkan dengan menggunakan preg_match kita ingin memecah tanggal menjadi hari, bulan, dan tahun. Mari gunakan kantong untuk ini:

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

Seperti yang Anda lihat, sebagai hasilnya kita mendapatkan array, di mana pada elemen nol akan ada seluruh tanggal, pada elemen pertama - tahun, pada elemen kedua - bulan, pada elemen ketiga - hari.

Terkadang, akan lebih nyaman untuk mendapatkan isi kantong dalam bentuk array asosiatif. Yaitu dalam kasus kita, akan lebih baik untuk mendapatkan array seperti ini:

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

Untuk ini, dalam regex ada sintaksis khusus. Ini dia: (?<name>pattern), di mana pattern adalah regex, dan name adalah nama kantong.

Mari kita tulis ulang regex tanggal kita menggunakan kantong bernama:

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

Hasilnya, kita akan mendapatkan array asosiatif, di mana kuncinya adalah nama-nama kantong, dan nilainya adalah apa yang masuk ke dalamnya:

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

Sebenarnya, dalam array hasil, nilai-nilai kantong akan dapat diakses baik berdasarkan nama maupun berdasarkan nomor urut. Artinya, misalnya, tahun akan dapat diakses dengan kunci 'year' dan dengan nomor 1, bulan - dengan kunci 'month' dan dengan nomor 2, dan seterusnya:

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

Kantong bernama yang dijelaskan memiliki beberapa sintaksis alternatif lagi: (?P<name>pattern) dan (?'name'pattern).

Задание 1

Diberikan string dengan waktu:

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

Letakkan jam, menit, dan detik ke dalam kantong bernama yang terpisah.

Задание 2

Tulis sebuah fungsi yang dalam array hasil akan menghapus semua kantong bernomor, menyisakan hanya kantong bernama.