PHP रेगुलर एक्सप्रेशन्स में लुकअहेड

कभी-कभी इस प्रकार का कार्य हल करने की आवश्यकता होती है: स्ट्रिंग 'aaa' को ढूंढें और इसे '!' से बदलें, लेकिन केवल तभी जब 'aaa' के बाद 'x' हो, और स्वयं 'x' को न बदलें। यदि हम इस कार्य को 'सीधे तरीके से' हल करने का प्रयास करते हैं, तो हम सफल नहीं होंगे:

php<?php
  preg_replace('#aaax#', '!', 'aaax'); // '!' होगा, लेकिन '!x' होना चाहिए
?>

कार्य को हल करने के लिए एक तरीका यह कहने की आवश्यकता है कि 'x' को प्रतिस्थापित नहीं किया जाना चाहिए। यह विशेष ब्रैकेट (?= ) की सहायता से किया जाता है, जो केवल देखते हैं, लेकिन स्वयं के साथ नहीं ले जाते।

इन ब्रैकेट्स को पॉजिटिव लुकअहेड कहा जाता है। पॉजिटिव - क्योंकि 'x' (हमारे मामले में) होना चाहिए - केवल तभी प्रतिस्थापन होगा।

आइए हमारे कार्य को हल करने के लिए इन ब्रैकेट्स का उपयोग करें:

php<?php
  preg_replace('#aaa(?=x)#', '!', 'aaax'); // '!x' लौटाएगा
?>

नेगेटिव लुकअहेड भी होता है - (?! ) - यह, इसके विपरीत, कहता है कि कुछ नहीं होना चाहिए। निम्नलिखित उदाहरण में प्रतिस्थापन केवल तभी होगा, जब 'aaa' के बाद 'x' न हो:

php<?php
  preg_replace('#aaa(?!x)#', '!', 'aaab'); // '!b' लौटाएगा
?>
Задание 1

एक स्ट्रिंग दी गई है, जिसमें फ़ंक्शन के नाम हैं:

php<?php
  $str = 'func1() func2() func3()';
?>

स्ट्रिंग से फ़ंक्शन नामों की एक सरणी प्राप्त करें।

Задание 2

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

php<?php
  $str = '<a href="" class="eee" id="zzz">';
?>

इस टैग की विशेषताओं (ऐट्रिब्यूट्स) के नामों की एक सरणी प्राप्त करें।