Именувани групи во регуларните изрази во PHP
Нека со помош на 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);
?>
Како резултат ќе добиеме асоцијативна низа, во која клучевите ќе бидат имињата на групите, а вредностите - она што влегло во нив:
[
'year' => '2025',
'month' => '10',
'day' => '29',
]
Всушност, во низата со резултат вредностите
на групите ќе бидат достапни и по име, и
по редословен број. Односно, на пример,
годината ќе биде достапна по клуч 'year'
и по број 1, месецот - по клуч 'month'
и по број 2 и така натаму:
[
'year' => '2025',
'month' => '10',
'day' => '29',
1 => '2025',
2 => '10',
3 => '29'
]
Опишаните именувани групи имаат уште неколку
алтернативни синтакси: (?P<name>pattern)
и (?'name'pattern).
Дадена е низа со време:
<?php
$str = '12:59:59';
?>
Ставете ги часовите, минутите и секундите во посебни именувани групи.
Напишете функција, која во низата со резултат ќе ги избрише сите нумерирани групи, оставајќи само именуваните.