Укупан број џепова у регуларним изразима у 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',
  ];
?>

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