Именовани џепови у регуларним изразима ПХП-а
Рецимо да помоћу preg_match желимо
да поделимо датум на дан, месец и годину. Користимо
за то џепове:
<?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']
?>
Као што видите, као резултат добијамо низ, у коме ће на нултом елементу бити цео датум, на првом - година, на другом - месец, на трећем - дан.
Понекад би, међутим, било згодно добити садржај џепова у виду асоцијативног низа. То јесте, у нашем случају било би лепо добити овакав низ:
[
'year' => '2025',
'month' => '10',
'day' => '29'
]
За то у регуларним изразима постоји посебан
синтакса. Ево га: (?<name>pattern),
где је pattern - регуларни израз, а name
- име џепа.
Хајде да препишемо наш регуларни израз за датум преко именованих џепова:
<?php
$str = '2025-10-29';
$reg = '#(?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2})#';
preg_match($reg, $str, $match);
var_dump($match);
?>
Као резултат, добићемо асоцијативни низ, у коме ће кључеви бити имена џепова, a вредности - оно што је у њих упало:
[
'year' => '2025',
'month' => '10',
'day' => '29',
]
Заправо, у низу са резултатом, вредности
џепова ће бити доступне и по имену и
по редном броју. То јесте, на пример,
година ће бити доступна под кључем 'year'
и под бројем 1, месец - под кључем 'month'
и под бројем 2 и тако даље:
[
'year' => '2025',
'month' => '10',
'day' => '29',
1 => '2025',
2 => '10',
3 => '29'
]
Описанa именованa џеповa имају још неколико
алтернативних синтакси: (?P<name>pattern)
и (?'name'pattern).
Дат je низ са временом:
<?php
$str = '12:59:59';
?>
Ставите сате, минуте и секунде у одвојене именоване џепове.
Напишите функцију која у низу са резултатом обрише све нумерисане џепове, оставивши само именоване.