Numri i përgjithshëm i xhepa në regex PHP
Le të shqyrtojmë situatën e mëposhtme. Supozoni se kemi
një variabël me një vit, i cili mund të ndryshojë
nga 1990 në 2099.
Supozoni se duam të marrim dy shifrat e fundit të
vitit në një xhep. Le të shkruajmë regex-in përkatës:
<?php
$reg = '#19(9\d)|20(\d\d)#';
?>
Sidoqoftë, këtu na pret një papërshtatsi. Çështja është se për vitet e shekullit të kaluar, dy shifrat do të përfundojnë në xhepin e parë, ndërsa për vitet e shekullit të dytë - në të dytin. Le të shohim me shembuj.
Këtu është opsioni i parë:
<?php
$str = '1991';
preg_match($reg, $str, $res);
var_dump($res); // [1 => '91']
?>
Dhe këtu është opsioni i dytë:
<?php
$str = '2021';
preg_match($reg, $str, $res);
var_dump($res); // [2 => '21']
?>
Supozoni tani që duam të shkruajmë shifrat e gjetura të vitit në një variabël. Ne do të përballemi me një problem, sepse nuk e dimë saktësisht me çelësin e cilin të marrim të dhënat nga xhepi:
<?php
$year = $res[1]; // nevojitet çelësi 1 ose 2
?>
Problemi mund të zgjidhet me një kusht:
<?php
if (!empty($res[1])){
$year = $res[1];
} else{
$year = $res[2];
}
?>
Sidoqoftë, ekziston një zgjidhje më e thjeshtë. Mund të përdorni
komandën speciale (?| ). Të gjithë xhepat
që janë brenda saj do të kenë
një numër.
Le të rregullojmë regex-in tonë
<?php
$reg = '#(?|19(9\d)|20(\d\d))#';
?>
Dhe tani viti ynë me siguri do të jetë në xhepin numër një:
<?php
$year = $res[1];
?>
Janë dhënë stringje me data, në të cilat viti mund
të ndryshojë nga 1990 në 2099:
<?php
$arr = [
'31-12-2025',
'30-11-1995',
'29-10-1990',
];
?>
Për çdo datë, vendosni ditën në xhepin e parë, muajin në të dytin, dhe dy shifrat e fundit të vitit - në të tretin.