Bendras kišenių numeris PHP reguliariosiose išraiškose

Panagrinėkime tokią situaciją. Tarkime, kad turime kintamąjį su metais, kurie gali kisti nuo 1990 iki 2099. Tarkime, kad norime gauti paskutinius du metų skaitmenis į kišenę. Parašykime atitinkamą reguliariąją išraišką:

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

Tačiau čia mūsų laukia vienas nepatogumas. Faktas yra tas, kad praėjusio amžiaus metams du skaitmenys pateks į pirmą kišenę, o antro amžiaus metams - į antrą. Pažiūrėkime pavyzdžiais.

Štai pirmas variantas:

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

O štai antras variantas:

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

Tarkime, kad dabar norime rastus metų skaitmenis įrašyti į kintamąjį. Mūsų laukia problema, nes mes tiksliai nežinome, su kokiu raktu paimti duomenis iš kišenės:

php<?php
  $year = $res[1]; // reikia raktą 1 arba 2
?>

Problemą galima išspręsti naudojant sąlygą:

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

Tačiau yra paprastesnis sprendimas. Galima naudoti specialią komandą (?| ). Visos kišenės, kurios yra jos viduje, turės tą patį numerį.

Pataisykime mūsų reguliariąją išraišką

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

Ir dabar mūsų metai tikrai bus kišenėje su numeriu vienas:

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

Duotos eilutės su datomis, kuriose metai gali kisti nuo 1990 iki 2099:

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

Kiekvienai datai įdėkite dieną į pirmą kišenę, mėnesį į antrą, o paskutinius du metų skaitmenis - į trečią.