⊗ppPmRgNP 255 of 447 menu

PHP正規表現における名前付きキャプチャグループ

preg_matchを使って日付を日、月、年に分割したいとします。 そのためにキャプチャグループを使用します:

<?php $str = '2025-10-29'; $reg = '#(\d{4})-(\d{2})-(\d{2})#'; preg_match($reg, $str, $match); var_dump($match); // 出力: ['2025-10-29', '2025', '10', '29'] ?>

ご覧の通り、結果として得られる配列の0番目の要素は日付全体、 1番目は年、2番目は月、3番目は日となります。

しかし、時にはキャプチャグループの内容を連想配列として取得できたら便利な場合があります。 つまり、このケースでは次のような配列を取得できると良いでしょう:

[ 'year' => '2025', 'month' => '10', 'day' => '29' ]

このため、正規表現には特別な構文が存在します。 それは次の通りです: (?<name>pattern)。 ここでpatternは正規表現パターン、nameはキャプチャグループの名前です。

日付用の正規表現を名前付きキャプチャグループを使って書き直してみましょう:

<?php $str = '2025-10-29'; $reg = '#(?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2})#'; preg_match($reg, $str, $match); var_dump($match); ?>

結果として、キーがキャプチャグループ名、値がキャプチャされた内容となる 連想配列が得られます:

[ 'year' => '2025', 'month' => '10', 'day' => '29', ]

実際には、結果の配列ではキャプチャグループの値は名前と番号の両方でアクセス可能です。 つまり、例えば年はキー'year'と番号1で、 月はキー'month'と番号2でアクセスでき、以下同様です:

[ 'year' => '2025', 'month' => '10', 'day' => '29', 1 => '2025', 2 => '10', 3 => '29' ]

説明した名前付きキャプチャグループには他にもいくつかの代替構文があります: (?P<name>pattern)(?'name'pattern)

時刻の文字列が与えられています:

<?php $str = '12:59:59'; ?>

時、分、秒をそれぞれ別の名前付きキャプチャグループに入れてください。

結果の配列からすべての番号付きキャプチャグループを削除し、 名前付きのものだけを残す関数を書いてください。

日本語
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItalianoქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
当サイトでは、サイトの動作、分析、パーソナライゼーションのためにクッキーを使用しています。 データ処理はプライバシーポリシーに従って行われます。
すべて受け入れる 設定 拒否