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
$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:
[
'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
$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:
[
'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:
[
'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).
Diberikan string dengan waktu:
<?php
$str = '12:59:59';
?>
Letakkan jam, menit, dan detik ke dalam kantong bernama yang terpisah.
Tulis sebuah fungsi yang dalam array hasil akan menghapus semua kantong bernomor, menyisakan hanya kantong bernama.