PHP में preg_match_all के व्यवहार को बदलना

preg_match_all फ़ंक्शन के चौथे पैरामीटर की सहायता से कैप्चर ग्रुप्स के समूहीकरण के तरीके को बदला जा सकता है।

आइए देखें कि यह पैरामीटर कौन से मान ले सकता है:

पैरामीटर विवरण
PREG_PATTERN_ORDER डिफ़ॉल्ट मोड। परिणामों को कैप्चर ग्रुप्स द्वारा समूहीकृत किया जाता है - ऐरे का शून्यवां एलिमेंट शून्यवें कैप्चर ग्रुप्स को समाहित करता है, पहला एलिमेंट पहले कैप्चर ग्रुप्स को समाहित करता है और इसी तरह आगे।
PREG_SET_ORDER परिणामों को मिलानों द्वारा समूहीकृत किया जाता है - ऐरे का प्रत्येक एलिमेंट पाए गए कैप्चर ग्रुप्स वाले ऐरे को समाहित करता है।

आइए अब उदाहरणों पर इस पैरामीटर के उपयोग को देखें:

उदाहरण

आइए एक स्ट्रिंग से सभी टाइमस्टैम्प्स और उनके घटकों को निकालें:

php<?php
  $time = '12:01:02 13:03:04 14:05:06';
  preg_match_all('#(\d\d):(\d\d):(\d\d)#', $time, $res);
  print_r($res);
?>

कोड निष्पादित करने का परिणाम:

php[
  0 => ['12:01:02', '13:03:04', '14:05:06'],
  1 => ['12', '13', '14'],
  2 => ['01', '03', '05'],
  3 => ['02', '04', '06']
]

उदाहरण

और अब मिलानों द्वारा समूहीकरण के लिए PREG_SET_ORDER फ्लैग का उपयोग करते हैं:

php<?php
  $time = '12:01:02 13:03:04 14:05:06';
  preg_match_all('#(\d\d):(\d\d):(\d\d)#', $time, $res, PREG_SET_ORDER);
  print_r($res);
?>

कोड निष्पादित करने का परिणाम:

php[
  0 => '12:01:02',
  1 => '12',
  2 => '01',
  3 => '02'
],
[
  0 => '13:03:04',
  1 => '13',
  2 => '03',
  3 => '04'
],
[
  0 => '14:05:06',
  1 => '14',
  2 => '05',
  3 => '06'
]

प्रायोगिक कार्य

Задание 1

एक स्ट्रिंग दी गई है जिसमें तारीखें हैं:

php<?php
  $str = '2023-10-29 2024-11-30 2025-12-31';
?>

सभी तारीखों को ढूंढें, वर्ष, महीने और दिन को अलग-अलग कैप्चर ग्रुप्स में अलग करते हुए। ऐसा करें कि पहली सब-ऐरे में पहली तारीख उसके कैप्चर ग्रुप्स के साथ आए, दूसरी सब-ऐरे में - दूसरी तारीख उसके कैप्चर ग्रुप्स के साथ और इसी तरह आगे।