PHPでの正規表現検索におけるキャプチャグループ

ドメインを含む文字列があるとします:

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

このドメインを見つけ、ドメイン名とゾーンに分割してみましょう。 そのために、正規表現の特別なキャプチャグループ を使います。

キャプチャグループは配列の要素であり、 正規表現で見つかった部分をそこに入れることができます。 今回の場合、最初のグループにドメイン名を、 2番目のグループにそのゾーンを入れることができます。

それではやってみましょう。まず、文字列内のドメインを 見つける正規表現を書きます:

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

次に、正規表現の中でどの部分がどのグループに入るかを 指定しましょう。これは丸括弧で行います。 ドメイン名を検索する部分と、ドメインゾーンを 検索する部分をこれで区切りましょう:

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

そして、preg_match関数の第3引数に変数(名前は任意)を 指定します:

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

指定した変数には、見つかったキャプチャグループを含む 配列が入ります。配列の0番目の要素には見つかった文字列全体が、 1番目の要素には最初のグループ、 2番目の要素には2番目のグループ、 以降も同様に入ります:

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';
?>

ファイル名とその拡張子を別々のキャプチャグループに 入れてください。