【PHP8.x】GET_MATCH定数の使い方

GET_MATCH定数の使い方について、初心者にもわかりやすく解説します。

作成日: 更新日:

基本的な使い方

GET_MATCH定数は、RecursiveRegexIteratorクラスの動作モードを指定するための定数です。この定数をコンストラクタに設定することで、イテレータが返す値の形式を制御できます。通常、RecursiveRegexIteratorは正規表現にマッチしたイテレータの現在の要素、例えばファイル情報を表すSplFileInfoオブジェクトなどをそのまま返します。しかし、コンストラクタの第二引数であるモードにRecursiveRegexIterator::GET_MATCHを指定すると、イテレータは要素そのものではなく、正規表現にマッチした部分文字列を配列として返すようになります。この配列は、preg_match()関数でマッチ結果を取得したときと同じ構造を持ち、インデックス0にはマッチした文字列全体が、インデックス1以降には正規表現パターン内のキャプチャグループ(括弧で囲まれた部分)にマッチした文字列が格納されます。この機能は、ファイル名から日付やバージョン番号といった特定のパターンを抽出し、その抽出した文字列だけを直接処理したい場合に非常に便利です。要素全体を取得してから文字列を抽出する手間を省き、コードをより簡潔に記述することが可能になります。

構文(syntax)

1<?php
2
3$arrayIterator = new RecursiveArrayIterator([
4    'product-101',
5    'item-202',
6    'category' => [
7        'sub-item-303'
8    ]
9]);
10
11$regexIterator = new RecursiveRegexIterator(
12    $arrayIterator,
13    '/(\d+)/',
14    RecursiveRegexIterator::GET_MATCH
15);
16
17foreach ($regexIterator as $key => $value) {
18    // $keyにはマッチした文字列全体が、
19    // $valueにはpreg_match()の結果と同様の配列が格納されます。
20    var_dump([$key => $value]);
21}
22
23?>

引数(parameters)

引数なし

引数はありません

戻り値(return)

int

RecursiveRegexIterator::GET_MATCH は、RecursiveRegexIterator::getMode() メソッドによって返される整数値であり、RecursiveRegexIterator::RECURSIVE モードが指定されている場合に、正規表現にマッチした部分文字列全体を返します。

【PHP8.x】GET_MATCH定数の使い方 | いっしー@Webエンジニア