Рассмотрим следующую ситуацию. Пусть у нас
есть переменная с годом, который может изменяться
от 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',
];
?>
Для каждой даты положите день в первый карман, месяц во второй, а последние две цифры года - в третий.