АКЦЫЯ: бясплатныя месячныя курсы па стварэнні сайтаў
на выбар: вёрстка, JavaScript, PHP, Python або фрэймворкі. Сёння апошні дзень для запісу! Націскай!
⊗ppPmRgCPN 257 of 447 menu

Агульны нумар карманоў у рэгулярках 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', ]; ?>

Для кожнай даты пакладзеце дзень у першы карман, месяц у другі, а апошнія дзве лічбы года - у трэці.

byenru