Общий номер карманов в регулярках PHP

Рассмотрим следующую ситуацию. Пусть у нас есть переменная с годом, который может изменяться от 1990 до 2099. Пусть мы хотим получать последние две цифры года в карман. Напишем соответствующую регулярку:

php<?php
  $reg = '#19(9\d)|20(\d\d)#';
?>

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

Вот первый вариант:

php<?php
  $str = '1991';
  preg_match($reg, $str, $res);
  var_dump($res); // [1 => '91']
?>

А вот второй вариант:

php<?php
  $str = '2021';
  preg_match($reg, $str, $res);
  var_dump($res); // [2 => '21']
?>

Пусть теперь мы хотим записать найденные цифры года в переменную. Нас ждет проблема, ведь мы не знаем точно, с каким ключом забирать данные из кармана:

php<?php
  $year = $res[1]; // нужен ключ или 1, или 2
?>

Можно решить проблему через условие:

php<?php
  if (!empty($res[1])){
    $year = $res[1];
  } else{
    $year = $res[2];
  }
?>

Однако, есть решение попроще. Можно использовать специальную команду (?| ). Все карманы, которые находятся внутри нее будут иметь один номер.

Давайте исправим нашу регулярку

php<?php
  $reg = '#(?|19(9\d)|20(\d\d))#';
?>

И теперь наш год точно будет в кармане с номером один:

php<?php
  $year = $res[1];
?>
Задание 1

Даны строки с датами, в которых год может изменяться от 1990 до 2099:

php<?php
  $arr = [
    '31-12-2025',
    '30-11-1995',
    '29-10-1990',
  ];
?>

Для каждой даты положите день в первый карман, месяц во второй, а последние две цифры года - в третий.