PHPでの正規表現検索におけるキャプチャグループ
ドメインを含む文字列があるとします:
<?php
$str = 'eee site.ru bbb';
?>
このドメインを見つけ、ドメイン名とゾーンに分割してみましょう。 そのために、正規表現の特別なキャプチャグループ を使います。
キャプチャグループは配列の要素であり、 正規表現で見つかった部分をそこに入れることができます。 今回の場合、最初のグループにドメイン名を、 2番目のグループにそのゾーンを入れることができます。
それではやってみましょう。まず、文字列内のドメインを 見つける正規表現を書きます:
<?php
$reg = '#[a-z0-9_-]+\.[a-z]{2,}#';
?>
次に、正規表現の中でどの部分がどのグループに入るかを 指定しましょう。これは丸括弧で行います。 ドメイン名を検索する部分と、ドメインゾーンを 検索する部分をこれで区切りましょう:
<?php
$reg = '#([a-z0-9_-]+)\.([a-z]{2,})#';
?>
そして、preg_match関数の第3引数に変数(名前は任意)を
指定します:
<?php
preg_match($reg, $str, $res);
?>
指定した変数には、見つかったキャプチャグループを含む 配列が入ります。配列の0番目の要素には見つかった文字列全体が、 1番目の要素には最初のグループ、 2番目の要素には2番目のグループ、 以降も同様に入ります:
<?php
preg_match($reg, $str, $res);
var_dump($res); // 出力: ['site.ru', 'site', 'ru']
?>
日付を含む文字列が与えられています:
<?php
$str = '2025-12-31';
?>
年、月、日をそれぞれ別のキャプチャグループに入れてください。
ファイル名を含む文字列が与えられています:
<?php
$str = 'index.html';
?>
ファイル名とその拡張子を別々のキャプチャグループに 入れてください。