PHP में नॉन-कैप्चरिंग कोष्ठक रेगुलर एक्सप्रेशन में

कोष्ठक () दो कार्य करते हैं - वर्णों का समूहीकरण और कैप्चर समूह का कार्य। लेकिन क्या करें यदि हमें समूहीकरण करने की आवश्यकता है, लेकिन कैप्चर समूह में नहीं डालना है? इस समस्या के समाधान के लिए विशेष नॉन-कैप्चरिंग कोष्ठक (?: ) बनाए गए हैं - वे समूहीकरण करते हैं, लेकिन कैप्चर समूह में नहीं डालते।

उदाहरण

निम्नलिखित उदाहरण में हमें पहले कोष्ठक समूहीकरण के लिए चाहिए, और दूसरे - कैप्चर समूह के लिए। हालांकि, दोनों कोष्ठक डेटा को कैप्चर समूह में सहेजते हैं:

php<?php
  $str = 'abab123';
  $reg = '#(ab)+([1-9]+)#';
  preg_match_all($reg, $str, $res);
?>

परिणामस्वरूप हमारे कैप्चर समूहों में निम्नलिखित होगा:

php<?php
  var_dump($res[0]); // आउटपुट 'abab123'
  var_dump($res[1]); // आउटपुट 'ab'
  var_dump($res[2]); // आउटपुट '123'
?>

उदाहरण

आइए ऐसा बनाएं कि कोष्ठकों की पहली जोड़ी केवल समूहीकरण करे, लेकिन कैप्चर समूह में न डाले:

php<?php
  $str = 'abab123';
  $reg = '#(?:ab)+([1-9]+)#';
  preg_match_all($reg, $str, $res);
?>

परिणामस्वरूप पहले कैप्चर समूह में हमारी संख्या होगी:

php<?php
  var_dump($res[1]); // आउटपुट '123'
?>

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

Задание 1

उपस्ट्रिंग्स दी गई हैं, जो दो भागों में विभाजित हैं $@ के जोड़े की मनमानी संख्या से:

php<?php
  $str = 'aaa$@bbb aaa$@$@bbb aaa$@$@$@bbb';
?>

ऐसी प्रत्येक उपस्ट्रिंग ढूंढें और प्रत्येक मिली उपस्ट्रिंग के लिए पहले कैप्चर समूह में वह डालें जो विभाजक से पहले है, और दूसरे कैप्चर समूह में - वह जो विभाजक के बाद है।