Групи при търсене с регулярни изрази в 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';
?>

Сложете името на файла и неговото разширение в отделни групи.