Nosauktie kapteņi PHP regulārajās izteiksmēs
Pieņemsim, ka ar preg_match palīdzību mēs vēlamies
sadalīt datumu dienā, mēnesī un gadā. Izmantosim
šim nolūkam kapteņus:
<?php
$str = '2025-10-29';
$reg = '#(\d{4})-(\d{2})-(\d{2})#';
preg_match($reg, $str, $match);
var_dump($match); // izvadīs ['2025-10-29', '2025', '10', '29']
?>
Kā jūs redzat, rezultātā mēs iegūstam masīvu, kurā nulles elementā būs viss datums, pirmajā - gads, otrajā - mēnesis, trešajā - diena.
Dažreiz tomēr būtu ērti iegūt kapteņu saturu asociatīvā masīva veidā. Tas ir, mūsu gadījumā būtu labi iegūt šeitādu masīvu:
[
'year' => '2025',
'month' => '10',
'day' => '29'
]
Šim nolūkam regulārajās izteiksmēs pastāv speciāls
sintakse. Lūk, tā: (?<name>pattern),
kur pattern - ir regulārā izteiksme, bet name
- ir kapteņa nosaukums.
Pārrakstīsim mūsu datuma regulāro izteiksmi izmantojot nosauktos kapteņus:
<?php
$str = '2025-10-29';
$reg = '#(?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2})#';
preg_match($reg, $str, $match);
var_dump($match);
?>
Rezultātā mums izveidosies asociatīvs masīvs, kurā atslēgas būs kapteņu nosaukumi, bet vērtības - tas, kas tajos iekrita:
[
'year' => '2025',
'month' => '10',
'day' => '29',
]
Patiesībā rezultātu masīvā kapteņu vērtības
būs pieejamas gan pēc nosaukuma, gan
arī pēc kārtas numura. Tas ir, piemēram,
gads būs pieejams pēc atslēgas 'year'
un pēc numura 1, mēnesis - pēc atslēgas 'month'
un pēc numura 2 un tā tālāk:
[
'year' => '2025',
'month' => '10',
'day' => '29',
1 => '2025',
2 => '10',
3 => '29'
]
Aprakstītajiem nosauktajiem kapteņiem ir vēl dažas
alternatīvas sintakses: (?P<name>pattern)
un (?'name'pattern).
Dota virkne ar laiku:
<?php
$str = '12:59:59';
?>
Ievietojiet stundas, minūtes un sekundes atsevišķos nosauktos kapteņos.
Uzrakstiet funkciju, kas masīvā ar rezultātu izdzēsīs visus numurētos kapteņus, atstājot tikai nosauktos.