PHP में रेगुलर एक्सप्रेशन में विशेष वर्णों को एस्केप करना
मान लीजिए कि हम चाहते हैं कि विशेष वर्ण स्वयं को दर्शाए। इसके लिए इसे बैकस्लैश का उपयोग करके एस्केप करना होगा। आइए उदाहरणों से देखें।
उदाहरण
निम्नलिखित उदाहरण में, रेगुलर एक्सप्रेशन के लेखक चाहते थे,
कि खोज पैटर्न इस तरह दिखे: अक्षर
'a', फिर प्लस '+', फिर
अक्षर 'x'। हालाँकि, कोड के लेखक ने
'+' वर्ण को एस्केप नहीं किया और इसलिए
खोज पैटर्न वास्तव में इस तरह दिखता है:
अक्षर 'a' एक या अधिक बार, फिर
अक्षर 'x':
<?php
$str = 'a+x ax aax aaax';
$res = preg_replace('#a+x#', '!', $str);
?>
परिणामस्वरूप वेरिएबल में निम्नलिखित लिखा जाएगा:
'a+x ! ! !'
उदाहरण
और अब लेखक ने प्लस को बैकस्लैश से एस्केप कर दिया है।
अब खोज पैटर्न वैसा ही दिखता है, जैसा होना चाहिए: अक्षर 'a', फिर प्लस
'+', फिर अक्षर 'x'।
<?php
$str = 'a+x ax aax aaax';
$res = preg_replace('#a\+x#', '!', $str);
?>
परिणामस्वरूप वेरिएबल में निम्नलिखित लिखा जाएगा:
'! ax aax aaax'
उदाहरण
इस उदाहरण में पैटर्न इस तरह दिखता है: अक्षर
'a', फिर डॉट '.', फिर
अक्षर 'x':
<?php
$str = 'a.x abx azx';
$res = preg_replace('#a\.x#', '!', $str);
?>
परिणामस्वरूप वेरिएबल में निम्नलिखित लिखा जाएगा:
'! abx azx'
उदाहरण
और अगले उदाहरण में लेखक स्लैश को एस्केप करना भूल गया और रेगुलर एक्सप्रेशन ने सभी सबस्ट्रिंग को पकड़ लिया, क्योंकि अनएस्केप्ड डॉट किसी भी वर्ण को दर्शाती है:
<?php
$str = 'a.x abx azx';
$res = preg_replace('#a.x#', '!', $str);
?>
परिणामस्वरूप वेरिएबल में निम्नलिखित लिखा जाएगा:
'! ! !'
उदाहरण
ध्यान दें कि यदि आप डॉट के लिए बैकस्लैश भूल जाते हैं (जब उसे स्वयं को दर्शाना चाहिए) - इस पर ध्यान देना मुश्किल हो सकता है:
<?php
preg_replace('#a.x#', '!', 'a.x'); // '!' लौटाएगा, जैसा कि हम चाहते थे
?>
दृष्टि से यह सही ढंग से काम करता है (क्योंकि डॉट
किसी भी वर्ण को दर्शाती है, जिसमें सामान्य
डॉट '.' भी शामिल है)। लेकिन यदि वह स्ट्रिंग बदल दें,
जिसमें प्रतिस्थापन हो रहा है - तो हम अपनी गलती देखेंगे:
<?php
preg_replace('#a.x#', '!', 'a.x abx azx'); // '! ! !' लौटाएगा, जबकि अपेक्षा थी '! abx azx'
?>