⊗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', ]; ?>

За всяка дата поставете деня в първата група, месеца във втората, а последните две цифри на годината - в третата.

Български
AfrikaansAzərbaycanবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Ние използваме бисквитки за работата на сайта, анализ и персонализация. Обработката на данни се извършва в съответствие с Политика за поверителност.
приемам всички настройки отхвърляне