PHP में रेगुलर एक्सप्रेशन में कैप्चर ग्रुप

कैप्चर ग्रुप की सामग्री न केवल रिप्लेसमेंट स्ट्रिंग में, बल्कि स्वयं रेगुलर एक्सप्रेशन में भी उपलब्ध होती है: हम कुछ भी कैप्चर ग्रुप में रख सकते हैं, और फिर सीधे रेगुलर एक्सप्रेशन में कह सकते हैं कि यहाँ उस कैप्चर ग्रुप की सामग्री होनी चाहिए।

कैप्चर ग्रुप की सामग्री उनकी संख्याओं के द्वारा उपलब्ध होती है, जिनके आगे बैकस्लैश लगा होता है। उदाहरण के लिए, शून्य कैप्चर ग्रुप इस तरह उपलब्ध होगा: \0, पहला कैप्चर ग्रुप इस तरह - \1, दूसरा - \2 और इसी तरह।

मुझे यकीन है कि ऊपर लिखी गई सभी बातें अभी आपके लिए काफी अस्पष्ट हैं। यह आश्चर्य की बात नहीं है, क्योंकि कैप्चर ग्रुप - रेगुलर एक्सप्रेशन का सबसे कम समझ आने वाला हिस्सा है। आइए उदाहरणों के माध्यम से समझते हैं।

उदाहरण

मान लीजिए कि हमारे पास इस तरह की स्ट्रिंग है:

php<?php
  $str = 'aa bb cd ef';
?>

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

php<?php
  $res = preg_replace('#([a-z])\1#', '!', $str);
?>

परिणामस्वरूप वेरिएबल में निम्नलिखित लिखा जाएगा:

php'! ! cd ef'

उदाहरण

मान लीजिए कि हमारे पास इस तरह की स्ट्रिंग है:

php<?php
  $str = 'asxca buzxb csgd';
?>

आइए इसमें वे सभी शब्द ढूंढें जिनमें पहला और आखिरी अक्षर एक जैसे हों। इस कार्य को हल करने के लिए हम निम्नलिखित पैटर्न लिखेंगे: अक्षर, फिर एक या अधिक अक्षर, और फिर वही अक्षर जो पहला था:

php<?php
  $res = preg_replace('#([a-z])[a-z]+\1#', '!', $str);
?>

परिणामस्वरूप वेरिएबल में निम्नलिखित लिखा जाएगा:

php'! ! csgd'

उदाहरण

\1 के बजाय \g1 लिखा जा सकता है:

php<?php
  $res = preg_replace('#([a-z])[a-z]+\g1#', '!', $str);
?>

उदाहरण

\g{1} भी लिखा जा सकता है:

php<?php
  $res = preg_replace('#([a-z])[a-z]+\g{1}#', '!', $str);
?>

उदाहरण

कर्ली ब्रेसिज़ में नकारात्मक नंबर दिए जा सकते हैं। इस स्थिति में कैप्चर ग्रुप अंत से गिने जाएंगे:

php<?php
  $res = preg_replace('#([a-z])([a-z])\g{-2}#', '!', $str);
?>

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

Задание 1

एक स्ट्रिंग दी गई है:

php<?php
  $str = 'aaa bbb ccc xyz';
?>

वे सभी सबस्ट्रिंग ढूंढें जिनमें एक ही अक्षर लगातार तीन बार आया हो।

Задание 2

एक स्ट्रिंग दी गई है:

php<?php
  $str = 'a aa aaa abab bbbb';
?>

वे सभी सबस्ट्रिंग ढूंढें जिनमें एक ही अक्षर लगातार दो या अधिक बार आया हो।

Задание 3

एक स्ट्रिंग दी गई है:

php<?php
  $str = 'aaa aaa bbb bbb ccc ddd';
?>

वे सभी सबस्ट्रिंग ढूंढें जिनमें एक ही शब्द लगातार दो बार आया हो।