दिलचस्प पोस्ट
किसी सर्वर पर अपलोड करने से पहले छवि फ़ाइल आकार को कम करने के तरीके पायथन में यूनिकोड वर्ण कैसे मुद्रित करें? स्विफ्ट – डिवाइस का आईपी पता प्राप्त करें सेवा केवल एंड्रॉइड ऐप कैसे शुरू करें ब्राउज़र प्रिंट इवेंट का पता लगा रहा है कैसे पता करें कि कोई तत्व किसी सरणी में है या नहीं मैं कक्षा से स्टोरीबोर्ड प्रोग्राम को कैसे लोड कर सकता हूं? जीसीसी के ## __ वीए_एआरजीएस_ चाल के मानक विकल्प? चेकबॉक्स का रंग कैसे बदल सकता है? क्या कोई ओ (1 / एन) एल्गोरिदम हैं? सफल बिना एक फार्म सरणी पोस्ट करें वरीयताओं के लिए एक कस्टम लेआउट बनाना क्या cout सिंक्रनाइज़ / धागा-सुरक्षित है? क्या लिनक्स में कोई मानक निकास स्थिति कोड है? PHP और MYSQL: JOIN कार्रवाई में अस्पष्ट स्तंभ नामों को हल करने के लिए कैसे?

नियमित अभिव्यक्ति में क्या विशेष पात्रों को बचाना चाहिए?

मैं हमेशा सोचने की कोशिश कर रहा हूं, अगर मुझे विशेष वर्णों से बचना चाहिए ' ()[]{}| 'आदि। regexps के कई कार्यान्वयन का उपयोग करते समय

यह अलग है, उदाहरण के लिए, पायथन, एसएडी, जीआरपी, एएके, पर्ल, नाम बदलने, अपाचे, ढूंढें और इसी तरह। क्या कोई नियम सेट है जो बताता है कि कब कब होना चाहिए, और जब मुझे विशेष वर्णों से नहीं बचाना चाहिए? क्या यह regexp प्रकार पर निर्भर करता है, जैसे PCRE, POSIX या विस्तारित regexps?

वेब के समाधान से एकत्रित समाधान "नियमित अभिव्यक्ति में क्या विशेष पात्रों को बचाना चाहिए?"

आपको कौन सा पात्र चाहिए और जिनसे आपको बचाना नहीं चाहिए, वास्तव में आपके साथ काम कर रहे रेगेक्स स्वाद पर निर्भर करता है।

पीसीई के लिए, और अन्य तथाकथित पर्ल-संगत स्वादों, इन बाहरी वर्ण वर्गों से बचें:

 .^$*+?()[{\| 

और इन वर्णों के अंदर वर्ण:

 ^-]\ 

POSIX विस्तारित regexes (ईआरई) के लिए, इन बाहरी वर्ण वर्गों (पीसीआर के समान) से बचें:

 .^$*+?()[{\| 

किसी भी अन्य वर्णों से बचने में POSIX ERE के साथ एक त्रुटि है।

वर्ण वर्गों के अंदर, बैकस्लैश, POSIX नियमित अभिव्यक्ति में एक शाब्दिक वर्ण है। आप कुछ भी बचने के लिए इसका इस्तेमाल नहीं कर सकते यदि आप वर्ण श्रेणी मेटाचार्यों को शाब्दिक रूप में शामिल करना चाहते हैं तो आपको "चतुर नियुक्ति" का उपयोग करना होगा शुरूआत के अलावा कहीं भी, ^] शुरू में, और – – या शाब्दिक रूप से इन वर्गों के साथ शुरू करने के लिए – या शाब्दिक रूप से मैच करने के लिए, उदाहरण के लिए:

 []^-] 

पीओएसआईक्स बुनियादी नियमित अभिव्यक्ति (बीआरई) में, ये मेटाचैक्टर्स हैं जिन्हें आप अपने अर्थ को दबाने के लिए भागने की जरूरत है:

 .^$* 

बीआरई में से बचने वाले कोष्ठक और घुंघराले ब्रैकेट उन्हें विशेष अर्थ देते हैं, जो उनके अपरिष्कृत संस्करण ईईआरएस में हैं। कुछ कार्यान्वयन (जैसे जीएनयू) बचने के बाद अन्य पात्रों को विशेष अर्थ भी देता है, जैसे कि \? और + ^ $ * () {} सामान्य रूप से बीआरई के साथ एक त्रुटि है।

चरित्र वर्गों के अंदर, बीआरई पूर्वकाल के रूप में एक ही नियम का पालन करते हैं।

यदि यह सब आपके सिर को स्पिन करता है, तो RegexBuddy की एक प्रतिलिपि पकड़ो बनाएँ टैब पर, टोकन सम्मिलित करें क्लिक करें, और फिर लीटरल RegexBuddy जरूरत के रूप में पलायन जोड़ देगा

आधुनिक रेगएक्स फ्लेवर (पीसीआरई)

सी, सी ++, डेल्फी, एडिट पैड, जावा, जावास्क्रिप्ट, पर्ल, पीएचपी (प्रीग), पोस्टग्रेएसक्यूएल, पावरग्रेप, पावरशेले, पायथन, रीलाब्सिक, रियल स्टूडियो, रूबी, टीसीएल, वीबीनेट, वीबीएसपीटीपी, एक्सएमएल स्कीमा, एक्सोजो, XRegExp।
PCRE संगतता भिन्न हो सकती है

कहीं भी: . ^ $ * + - ? ( ) [ ] { } \ |


लीगेसी रेगएक्स फ्लेवर (बीआरई / ईआरई)

इसमें शामिल हैं awk, ed, egrep, emacs, gnulib, grep, php (ereg), mysql, oracle, r, sed
पीसीईई समर्थन बाद के संस्करणों में या एक्सटेंशन का उपयोग करके सक्षम किया जा सकता है

ERE / awk / egrep / Emacs

एक चरित्र वर्ग के बाहर: . ^ $ * + ? ( ) [ { } \ |
एक चरित्र वर्ग के अंदर: ^ - [ ]

BRE / एड / ग्रेप / SED

एक चरित्र वर्ग के बाहर: . ^ $ * [ \
एक चरित्र वर्ग के अंदर: ^ - [ ]
शाब्दिक के लिए, बच नहीं है: + ? ( ) { } | + ? ( ) { } |
मानक regex व्यवहार के लिए, बच: \+ \? \( \) \{ \} \| \+ \? \( \) \{ \} \|


टिप्पणियाँ

  • यदि एक विशिष्ट चरित्र के बारे में अनिश्चित है, तो इसे \xFF तरह बच सकते हैं
  • अल्फ़ान्यूमेरिक वर्ण एक बैकस्लैश के साथ बच नहीं सकते हैं
  • अनियंत्रित प्रतीकों को पीसीआर में बैकस्लैश से बचाया जा सकता है, लेकिन बीआरई / ईआरई (जब आवश्यक हो तो उन्हें बचाना चाहिए)। पीसीई के लिए ] - केवल एक चरित्र वर्ग के भीतर भागने की आवश्यकता है, लेकिन मैंने सादगी के लिए उन्हें एक सूची में रखा है
  • उद्धृत अभिव्यक्ति स्ट्रिंग में पास के उद्धरण वर्णों को भी बचाना चाहिए, और अक्सर बैकस्लैश के साथ दोगुना-अप (जैसे "(\")(/)(\\.)" बनाम /(")(\/)(\.)/ में जावास्क्रिप्ट)
  • पलायन के अलावा, विभिन्न regex कार्यान्वयन विभिन्न संशोधक, चरित्र वर्ग, एंकर, क्वांटिफ़ायर, और अन्य सुविधाओं का समर्थन कर सकते हैं। अधिक जानकारी के लिए, regular-expressions.info देखें , या अपने भाव का परीक्षण करने के लिए regex101.com का उपयोग करें

दुर्भाग्यवश वास्तव में एस्केप कोड का सेट सेट नहीं है क्योंकि यह आपके द्वारा उपयोग की जाने वाली भाषा के आधार पर भिन्न होता है।

हालांकि, नियमित अभिव्यक्ति उपकरण पृष्ठ या इस नियमित अभिव्यक्ति चीटशीट जैसे पृष्ठ को रखने से आप चीजों को जल्दी से फ़िल्टर करने में मदद करने के लिए एक लंबा रास्ता तय कर सकते हैं।

पॉज़िक्स नियमित अभिव्यक्तियाँ – बुनियादी नियमित अभिव्यक्ति (बीआरई) और विस्तारित नियमित अभिव्यक्ति (ईआरई) पर कई विविधताओं को पहचानता है। और फिर भी, पॉसिक्स द्वारा मानकीकृत उपयोगिताओं के ऐतिहासिक कार्यान्वयन के कारण क्विट हैं

उस संकेतन का उपयोग कब करने के लिए कोई साधारण नियम नहीं है, या यहां तक ​​कि किसी दिए गए निर्देश का उपयोग करने के लिए भी नहीं।

जेफ फ्रिडल के मास्टरींग रेग्युलर एक्सप्रेशन बुक को देखें

दुर्भाग्य से, (और \ (Emacs शैली के नियमित अभिव्यक्ति और सबसे अन्य शैलियों के बीच में बदली गई हैं) जैसी चीजों का अर्थ है, इसलिए यदि आप इन से बचने की कोशिश करते हैं तो आप क्या चाहते हैं इसके विपरीत हो सकता है।

तो आपको वाकई पता होना चाहिए कि आप किस शैली को बोली लगाने की कोशिश कर रहे हैं।

आपके द्वारा सूचीबद्ध किए गए पात्रों के साथ कभी-कभी सरल पलायन संभव नहीं है उदाहरण के लिए, ब्रैकेट से बचने के लिए एक बैकस्लैश का उपयोग करना, sed में एक प्रतिस्थापन स्ट्रिंग की बाईं ओर काम करने वाला नहीं है, अर्थात्

 sed -e 's/foo\(bar/something_else/' 

मैं इसके बजाय सिर्फ एक साधारण वर्ण वर्ग की परिभाषा का उपयोग करता हूं, इसलिए उपरोक्त अभिव्यक्ति हो जाता है

 sed -e 's/foo[(]bar/something_else/' 

जो मुझे सबसे अधिक regexp कार्यान्वयन के लिए काम करता है।

बीटीडब्ल्यू वर्ण वर्ग बहुत वेनिला रेगेक्सपी घटकों हैं इसलिए वे ज्यादातर परिस्थितियों में काम करते हैं, जहां आपको regexps में भागने वाले पात्रों की आवश्यकता होती है।

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

आप regexp इंजन मूल्यांकन प्रकारों में अंतर के लिए महसूस करने के लिए, "चमकदार गेंद पुस्तक" उर्फ ​​प्रभावी पर्ल ( सैनिटरीकृत अमेज़ॅन लिंक ), विशेष रूप से नियमित अभिव्यक्ति पर अध्याय को देखना पसंद कर सकते हैं।

दुनिया के सभी पीसीई नहीं हैं!

वैसे भी, regexp एसएनओबीओएल की तुलना में बहुत clunky हैं! अब यह एक दिलचस्प प्रोग्रामिंग कोर्स था! सिमुला पर एक के साथ

आह '70 के दशक में यूएनएसडब्लू में पढ़ाई की खुशी! (-:

वास्तव में, वहाँ नहीं है। लगभग एक आधा-ज़िलियन अलग-अलग रेगेक्स सिंटैक्स हैं; वे सामान्य रूप से पर्ल, ईएमएसीएस / जीएनयू, और एटी एंड टी तक आने लगते हैं, लेकिन मुझे हमेशा भी आश्चर्य हो रहा है।

PHP के लिए, "यह हमेशा स्वयं के लिए खड़ा है यह निर्दिष्ट करने के लिए" \ "के साथ एक गैर-अल्फ़ान्यूमेरिक से पहले सुरक्षित होता है।" – http://php.net/manual/en/regexp.reference.escape.php

सिवाय इसके कि यह "या" है।: /

PHP उपयोग में regex पैटर्न चर (या आंशिक चर) से बचने के लिए preg_quote ()