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',
];
?>
Әр дата үшін күнді бірінші қалтаға, айды екінші қалтаға, ал жылдың соңғы екі цифрын үшінші қалтаға салыңыз.