PHP में नियमित अभिव्यक्तियों में नामित समूह

मान लीजिए कि preg_match का उपयोग करके हम तारीख को दिन, महीने और वर्ष में विभाजित करना चाहते हैं। इसके लिए हम समूहों का उपयोग करेंगे:

php<?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' आउटपुट करेगा]
?>

जैसा कि आप देख रहे हैं, परिणामस्वरूप हमें एक सरणी मिलती है, जिसमें शून्यवें तत्व में पूरी तारीख होगी, पहले में - वर्ष, दूसरे में - महीना, तीसरे में - दिन।

हालांकि, कभी-कभी समूहों की सामग्री को एसोसिएटिव सरणी के रूप में प्राप्त करना सुविधाजनक होता। यानी हमारे मामले में ऐसी सरणी प्राप्त करना अच्छा रहेगा:

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

इसके लिए नियमित अभिव्यक्तियों में एक विशेष सिंटैक्स होता है। वह यह है: (?<name>pattern), जहाँ pattern - नियमित अभिव्यक्ति है, और name - समूह का नाम है।

आइए हम नामित समूहों के माध्यम से तारीख के लिए अपनी नियमित अभिव्यक्ति को फिर से लिखें:

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

परिणामस्वरूप, हमें एक एसोसिएटिव सरणी मिलेगी, जिसमें कुंजियाँ समूहों के नाम होंगे, और मान - वह होंगे जो उनमें आए:

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

वास्तव में, परिणाम वाली सरणी में समूहों के मान नाम के साथ-साथ क्रमिक संख्या से भी उपलब्ध होंगे। यानी, उदाहरण के लिए, वर्ष 'year' कुंजी के द्वारा और 1 नंबर से उपलब्ध होगा, महीना - 'month' कुंजी के द्वारा और 2 नंबर से और इसी तरह आगे:

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

वर्णित नामित समूहों के कुछ और वैकल्पिक सिंटैक्स हैं: (?P<name>pattern) और (?'name'pattern)।

Задание 1

समय के साथ एक स्ट्रिंग दी गई है:

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

घंटे, मिनट और सेकंड को अलग-अलग नामित समूहों में रखें।

Задание 2

एक फ़ंक्शन लिखें जो परिणाम वाली सरणी में सभी क्रमांकित समूहों को हटा दे, केवल नामित समूहों को छोड़कर।