Карманы при поиске через регулярки на PHP

Пусть у нас есть некоторая строка, содержащая домен:

php<?php
  $str = 'eee site.ru bbb';
?>

Давайте найдем этот домен и разделим его на части: отделим имя домена от его зоны. Для этого мы используем специальные карманы регулярных выражений.

Карманы представляют собой элементы массива, в которые можно положить части найденного регуляркой. В нашем случае в первый карман мы можем положить имя домена, а во второй - его зону.

Давайте сделаем это. Для начала напишем регулярку, которая находит домен в строке:

php<?php
  $reg = '#[a-z0-9_-]+\.[a-z]{2,}#';
?>

Давайте теперь в нашей регулярке обозначим, какие части в какой карман должны попадать. Это делается с помощью круглых скобок. Давайте выделим с их помощью часть регулярки, которая ищет имя домена, и ту часть, которая ищет доменную зону:

php<?php
  $reg = '#([a-z0-9_-]+)\.([a-z]{2,})#';
?>

Теперь в функции preg_match в качестве третьего параметра укажем переменную (имя любое):

php<?php
  preg_match($reg, $str, $res);
?>

В указанную переменную попадет массив с найденными карманами. При этом в нулевом элементе массива будет лежать найденная строка, в первом элементе - первый карман, во втором элементе - второй карман и так далее:

php<?php
  preg_match($reg, $str, $res);
  var_dump($res); // выведет ['site.ru', 'site', 'ru']
?>
Задание 1

Дана строка с датой:

php<?php
  $str = '2025-12-31';
?>

Положите год, месяц и день в отдельные карманы.

Задание 2

Дана строка с именем файла:

php<?php
  $str = 'index.html';
?>

Положите имя файла и его расширение в отдельные карманы.