【PHP8.x】PREG_PATTERN_ORDER定数の使い方
PREG_PATTERN_ORDER定数の使い方について、初心者にもわかりやすく解説します。
基本的な使い方
PREG_PATTERN_ORDER定数は、PHPの正規表現関数、特にpreg_match_all関数で、パターンにマッチした結果をどのように取得し、整理するかを指定するための定数です。この定数を使用すると、preg_match_all関数が返す多次元配列($matches)の構造が決定されます。
具体的には、PREG_PATTERN_ORDERを指定した場合、まず見つかったすべての一致について、正規表現パターン全体にマッチした文字列が配列の最初の要素($matches[0])にまとめて格納されます。その次に、正規表現内の最初のキャプチャグループ(括弧で囲まれた部分)にマッチしたすべての文字列が次の要素($matches[1])にまとめられ、同様に2番目のキャプチャグループにマッチしたすべての文字列が$matches[2]にまとめられる、という順序で結果が格納されます。
つまり、$matches[0]には「マッチ全体のリスト」、$matches[1]には「最初のキャプチャグループのマッチのリスト」という形で、キャプチャグループごとにすべてのマッチ結果がまとめて提供されます。これにより、たとえばウェブページから複数の日付データすべてを特定の形式で抽出したい場合や、複数のリンクのURLだけをまとめて取得したい場合など、特定のキャプチャグループに属するすべてのマッチを一度に処理したい場合に非常に便利です。この順序は、各キャプチャグループにおけるすべてのマッチを一覧で取得したいときに適しています。
構文(syntax)
1<?php 2 3$subject = "<div>Hello</div><span>World</span>"; 4$pattern = '/<(div|span)>(.*?)<\/\1>/'; 5$matches = []; 6 7preg_match_all($pattern, $subject, $matches, PREG_PATTERN_ORDER); 8 9print_r($matches); 10 11?>
引数(parameters)
引数なし
引数はありません
戻り値(return)
int
PREG_PATTERN_ORDERは、preg_match_all関数で使用する定数です。この定数を指定すると、マッチした部分文字列の並び順が、パターンにおける出現順序ではなく、キャプチャグループの番号順になります。