Poket Bernama dalam Ungkapan Biasa PHP
Katakan kita ingin menggunakan preg_match untuk
memisahkan tarikh kepada hari, bulan dan tahun. Kita akan menggunakan
poket untuk tujuan ini:
<?php
$str = '2025-10-29';
$reg = '#(\d{4})-(\d{2})-(\d{2})#';
preg_match($reg, $str, $match);
var_dump($match); // akan output ['2025-10-29', '2025', '10', '29']
?>
Seperti yang anda lihat, hasilnya kita mendapat array, di mana elemen sifar akan mengandungi keseluruhan tarikh, elemen pertama - tahun, elemen kedua - bulan, elemen ketiga - hari.
Walau bagaimanapun, kadangkala adalah lebih mudah untuk mendapatkan kandungan poket dalam bentuk array asosiatif. Iaitu, dalam kes kami, adalah baik untuk mendapatkan array seperti ini:
[
'year' => '2025',
'month' => '10',
'day' => '29'
]
Untuk ini, terdapat sintaks khas dalam ungkapan biasa.
Inilah dia: (?<name>pattern),
di mana pattern ialah ungkapan biasa, dan name
ialah nama poket.
Mari kita tulis semula ungkapan biasa tarikh kami menggunakan poket 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 mendapat array asosiatif di mana kuncinya ialah nama poket, dan nilainya ialah kandungan yang ditangkap:
[
'year' => '2025',
'month' => '10',
'day' => '29',
]
Sebenarnya, dalam array hasil, nilai
poket akan boleh diakses sama ada melalui nama ataupun
nombor indeks. Contohnya,
tahun boleh diakses melalui kunci 'year'
dan nombor 1, bulan - melalui kunci 'month'
dan nombor 2 dan seterusnya:
[
'year' => '2025',
'month' => '10',
'day' => '29',
1 => '2025',
2 => '10',
3 => '29'
]
Poket bernama yang diterangkan ini mempunyai beberapa
sintaks alternatif: (?P<name>pattern)
dan (?'name'pattern).
Diberi rentetan masa:
<?php
$str = '12:59:59';
?>
Letakkan jam, minit dan saat ke dalam poket bernama yang berasingan.
Tulis fungsi yang dalam array hasil akan memadam semua poket bernombor, hanya meninggalkan poket bernama.