Укупан број џепова у регуларним изразима у PHP-у
Размотримо следећу ситуацију. Претпоставимо да имамо
променљиву са годином, која може да се мења
од 1990 до 2099.
Претпоставимо да желимо да добијемо последње две цифре
године у џеп. Написаћемо одговарајући регуларни израз:
<?php
$reg = '#19(9\d)|20(\d\d)#';
?>
Међутим, овде нас чека једна незгода. Ствар је у томе што ће за године прошлог века две цифре упадати у први џеп, а за године другог века - у други. Погледајмо на примерима.
Ево прве опције:
<?php
$str = '1991';
preg_match($reg, $str, $res);
var_dump($res); // [1 => '91']
?>
А ево друге опције:
<?php
$str = '2021';
preg_match($reg, $str, $res);
var_dump($res); // [2 => '21']
?>
Претпоставимо сада да желимо да запишемо пронађене цифре године у променљиву. Чека нас проблем, јер не знамо тачно са којим кључем да узмемо податке из џепа:
<?php
$year = $res[1]; // потребан је кључ или 1, или 2
?>
Проблем се може решити условом:
<?php
if (!empty($res[1])){
$year = $res[1];
} else{
$year = $res[2];
}
?>
Међутим, постоји једноставније решење. Може се користити
специјална наредба (?| ). Сви џепови
који се налазе унутар ње ће имати
један број.
Исправимо наш регуларни израз
<?php
$reg = '#(?|19(9\d)|20(\d\d))#';
?>
И сада ће наша година сигурно бити у џепу са бројем један:
<?php
$year = $res[1];
?>
Дате су ниске са датумима, у којима година може
да се мења од 1990 до 2099:
<?php
$arr = [
'31-12-2025',
'30-11-1995',
'29-10-1990',
];
?>
За сваки датум ставите дан у први џеп, месец у други, а последње две цифре године - у трећи.