Bendras kišenių numeris PHP reguliariosiose išraiškose
Panagrinėkime tokią situaciją. Tarkime, kad turime
kintamąjį su metais, kurie gali kisti
nuo 1990 iki 2099.
Tarkime, kad norime gauti paskutinius du metų skaitmenis
į kišenę. Parašykime atitinkamą reguliariąją išraišką:
<?php
$reg = '#19(9\d)|20(\d\d)#';
?>
Tačiau čia mūsų laukia vienas nepatogumas. Faktas yra tas, kad praėjusio amžiaus metams du skaitmenys pateks į pirmą kišenę, o antro amžiaus metams - į antrą. Pažiūrėkime pavyzdžiais.
Štai pirmas variantas:
<?php
$str = '1991';
preg_match($reg, $str, $res);
var_dump($res); // [1 => '91']
?>
O štai antras variantas:
<?php
$str = '2021';
preg_match($reg, $str, $res);
var_dump($res); // [2 => '21']
?>
Tarkime, kad dabar norime rastus metų skaitmenis įrašyti į kintamąjį. Mūsų laukia problema, nes mes tiksliai nežinome, su kokiu raktu paimti duomenis iš kišenės:
<?php
$year = $res[1]; // reikia raktą 1 arba 2
?>
Problemą galima išspręsti naudojant sąlygą:
<?php
if (!empty($res[1])){
$year = $res[1];
} else{
$year = $res[2];
}
?>
Tačiau yra paprastesnis sprendimas. Galima naudoti
specialią komandą (?| ). Visos kišenės,
kurios yra jos viduje, turės
tą patį numerį.
Pataisykime mūsų reguliariąją išraišką
<?php
$reg = '#(?|19(9\d)|20(\d\d))#';
?>
Ir dabar mūsų metai tikrai bus kišenėje su numeriu vienas:
<?php
$year = $res[1];
?>
Duotos eilutės su datomis, kuriose metai gali
kisti nuo 1990 iki 2099:
<?php
$arr = [
'31-12-2025',
'30-11-1995',
'29-10-1990',
];
?>
Kiekvienai datai įdėkite dieną į pirmą kišenę, mėnesį į antrą, o paskutinius du metų skaitmenis - į trečią.