PHP regulýar ifadelerinde ýalpy oturan eýeleriň umumy belgisi
Indiki ýagdaýy göz öňüne getireli. Görnüşi, bizde ýyly
aňladýan üýtgeýän kesgitleýji bar, ol 1990 ýyldan
2099 ýyla çenli üýtgeýär.
Görnüşi, biz ýylyň soňky iki sanysyny
eýe içine almak isleýäris. Degişli regulýar ifadäni ýazalyň:
<?php
$reg = '#19(9\d)|20(\d\d)#';
?>
Şonda-da, bizi bu ýerde bir kynçylyk garaşýar. Sebäbi, öten asyryň ýyllary üçin iki san birinji eýe içine düşer, ikinji asyryň ýyllary üçin bolsa ikinji eýe içine düşer. Mysallar bilen görkezeliň.
Birinji wariant:
<?php
$str = '1991';
preg_match($reg, $str, $res);
var_dump($res); // [1 => '91']
?>
Ikinji wariant:
<?php
$str = '2021';
preg_match($reg, $str, $res);
var_dump($res); // [2 => '21']
?>
Görnüşi, indi biz tapylan ýyl sanlaryny üýtgeýjä ýazmak isleýäris. Bizi problem garşylar, sebäbi biz kesgitli bilen, eýeden maglumatlary haýsy açary bilen almalydygyny bilemzok:
<?php
$year = $res[1]; // 1 ýa-da 2 açary gerek
?>
Problemi şert bilen çözüp bolýar:
<?php
if (!empty($res[1])){
$year = $res[1];
} else{
$year = $res[2];
}
?>
Şonda-da, has ýönekeý çözgüt bar. Esasy
buyruk (?| ) ulanup bolýar. Onuň içindäki ähli eýeler
bir belgili bolar.
Geliň, öz regulýar ifademizi düzelýäris
<?php
$reg = '#(?|19(9\d)|20(\d\d))#';
?>
Indi bolsa, ýyl belli bir belgili birinji eýe içinde bolar:
<?php
$year = $res[1];
?>
Senedler bilen setirler berlen, olarda ýyl
1990 ýyldan 2099 ýyla çenli üýtgeýär:
<?php
$arr = [
'31-12-2025',
'30-11-1995',
'29-10-1990',
];
?>
Her sened üçin güni birinji eýe, aýy ikinji eýe, ýylyň soňky iki sanysyny bolsa üçünji eýe goýuň.