यह जानने के लिए कि कब और क्या बिना प्रयास के बचना जरूरी है, यह समझने के लिए कि किन संदर्भों की श्रृंखला स्ट्रिंग से होकर गुजरती है। आप सबसे दूर की ओर से स्ट्रिंग को उसके अंतिम गंतव्य तक निर्दिष्ट करेंगे जो कि रेगेक्सपी पार्सिंग कोड द्वारा नियंत्रित की गई मेमोरी है।
याद रखें कि मेमोरी में स्ट्रिंग कैसे संसाधित होती है: यदि कोड के अंदर एक सादा स्ट्रिंग हो सकता है, या कमांड लाइन में एक स्ट्रिंग दर्ज की जा सकती है, लेकिन हो सकता है या तो एक इंटरेक्टिव कमांड लाइन हो या शेल स्क्रिप्ट फ़ाइल के अंदर बताई गई कमांड लाइन, या कोड के द्वारा उल्लिखित मेमोरी में एक चर के अंदर, या आगे के मूल्यांकन के माध्यम से (स्ट्रिंग) तर्क, या एक स्ट्रिंग जिसमें कोड गतिशील रूप से किसी भी प्रकार के एनकैप्सुलेशन के साथ उत्पन्न होता है ...
इस संदर्भ में से प्रत्येक ने कुछ पात्रों को विशेष कार्यक्षमता के साथ सौंपा।
जब आप अक्षर को उसके विशेष कार्य (संदर्भ के लिए स्थानीय) का उपयोग किए बिना शाब्दिक रूप से पारित करना चाहते हैं, तो इससे आपको अगले संदर्भ के लिए इसे बचाना होगा, जिसके लिए कुछ अन्य भागने वाले पात्रों की आवश्यकता हो सकती है, जो इसके अतिरिक्त होने की आवश्यकता हो सकती है पूर्ववर्ती सन्दर्भ में बच गए। इसके अलावा चरित्र एन्कोडिंग जैसी चीजें भी हो सकती हैं (सबसे कपटी utf-8 है क्योंकि यह आम पात्रों के लिए ASCII जैसा दिखता है, लेकिन टर्मिनल द्वारा वैकल्पिक रूप से इसकी सेटिंग्स के आधार पर भी व्याख्या की जा सकती है, इसलिए यह अलग तरह से व्यवहार कर सकता है, फिर HTML की एन्कोडिंग विशेषता / XML, प्रक्रिया को ठीक से समझना आवश्यक है।
उदाहरण के लिए, कमांड लाइन में एक regexp perl -npe, फ़ाइल हैंडल को पाइप हैंडल के रूप में कनेक्ट करने वाले निष्पादन कॉल के एक सेट में स्थानांतरित करने की आवश्यकता है, इस निष्पादन प्रणाली कॉल में से प्रत्येक में उन तर्कों की एक सूची है जो (गैर-बच गए) रिक्त स्थान से अलग हो गए थे, और संभवत: पाइप (!) और पुनर्निर्देशन (> एन> एन> और एम), कोष्ठक, का *और अंतःक्रियात्मक विस्तार ?,$(())... (यह सभी विशेष वर्ण हैं जिनका उपयोग * sh द्वारा किया जाता है जो अगले संदर्भ में नियमित अभिव्यक्ति के चरित्र के साथ हस्तक्षेप कर सकते हैं, लेकिन उनका मूल्यांकन क्रम में किया जाता है: कमांड लाइन से पहले। कमांड लाइन को वाचन द्वारा पढ़ा जाता है। bash / sh / csh / tsh / zsh के रूप में कार्यक्रम, अनिवार्य रूप से दोहरे उद्धरण या एकल उद्धरण के अंदर बच सरल है लेकिन कमांड लाइन में एक स्ट्रिंग को उद्धृत करना आवश्यक नहीं है क्योंकि ज्यादातर स्थान को बैकस्लैश के साथ उपसर्ग करना पड़ता है और उद्धरण होते हैं वर्णों के लिए उपलब्ध कार्यक्षमता को छोड़ना आवश्यक नहीं है * और?, लेकिन यह उद्धरण के रूप में अलग-अलग संदर्भ के रूप में पार्स। तब जब कमांड लाइन का मूल्यांकन मेमोरी में प्राप्त regexp (कमांड लाइन में नहीं लिखा जाता है) के रूप में किया जाता है, तो इसे एक ही उपचार प्राप्त होता है। एक स्रोत फ़ाइल में होगा। regexp के लिए वर्ग कोष्ठक के भीतर वर्ण-सेट संदर्भ है [],perl रेगुलर एक्सप्रेशन को नॉन अल्फ़ा-न्यूमेरिक कैरेक्टर्स (जैसे m m // या m: / better / for / path: ...) के एक बड़े सेट द्वारा उद्धृत किया जा सकता है।
आपके पास अन्य उत्तर के वर्णों के बारे में अधिक विवरण हैं, जो अंतिम रेगेक्स संदर्भ के लिए बहुत विशिष्ट हैं। जैसा कि मैंने आपको उल्लेख किया है कि आप प्रयास के साथ regexp से बच पाते हैं, ऐसा शायद इसलिए है क्योंकि अलग-अलग संदर्भों में चरित्र का अलग सेट है जो आपके प्रयासों की स्मृति को भ्रमित करता है (अक्सर बैकस्लैश वह चरित्र होता है जो इसके कार्य के बजाय शाब्दिक चरित्र से बचने के लिए अलग संदर्भ में होता है )।
escape()रेगेक्स के पुर्जों के रूप में मनमाने ढंग से तारों का उपयोग करने की अनुमति देने के लिए अच्छे रेगेक्स पुस्तकालयों में " " जैसे कार्य हैं ।