Regular Expressions
रेगेक्स संशोधक (झंडे)
खोज…
परिचय
नियमित अभिव्यक्ति पैटर्न को अक्सर संशोधक ( झंडे भी कहा जाता है) के साथ उपयोग किया जाता है जो रेगेक्स व्यवहार को फिर से परिभाषित करता है। रेगेक्स संशोधक नियमित हो सकते हैं (जैसे /abc/i ) और इनलाइन (या एम्बेडेड ) (जैसे (?i)abc ))। सबसे आम संशोधक वैश्विक, केस-असंवेदनशील, बहुस्तरीय और डॉटॉल संशोधक हैं। हालाँकि, रेगेक्स फ्लेवर समर्थित रेगेक्स संशोधक की संख्या और उनके प्रकारों में भिन्न होते हैं।
टिप्पणियों
PCRE संशोधक
| संशोधक | पंक्ति में | विवरण |
|---|---|---|
| PCRE_CASELESS | (?मैं) | केस असंवेदनशील मैच |
| PCRE_MULTILINE | (?म) | एकाधिक लाइन मिलान |
| PCRE_DOTALL | (? रों) | . नई लाइनों से मेल खाता है |
| PCRE_ANCHORED | (?ए) | मेटा-कैरेक्टर ^ केवल शुरुआत में मेल खाता है |
| PCRE_EXTENDED | (?एक्स) | व्हाइट-स्पेस को नजरअंदाज किया जाता है |
| PCRE_DOLLAR_ENDONLY | n / a | मेटा-चरित्र $ अंत में केवल मेल खाता है |
| PCRE_EXTRA | (?एक्स) | सख्त बच पार्सिंग |
| PCRE_UTF8 | UTF-8 वर्ण संभालता है | |
| PCRE_UTF16 | UTF-16 वर्ण संभालता है | |
| PCRE_UTF32 | UTF-32 अक्षर संभालती है | |
| PCRE_UNGREEDY | (? यू) | आलसी मिलान के लिए इंजन सेट करता है |
| PCRE_NO_AUTO_CAPTURE | (? :) | ऑटो-कैप्चरिंग समूहों को अक्षम करता है |
जावा संशोधक
संशोधक ( Pattern.### ) | मूल्य | विवरण |
|---|---|---|
| UNIX_LINES | 1 | यूनिक्स लाइनों मोड सक्षम करता है। |
| असंवेदनशील मामला | 2 | केस-असंवेदनशील मिलान सक्षम करता है। |
| टिप्पणियाँ | 4 | एक पैटर्न में व्हाट्सएप और टिप्पणियों की अनुमति देता है। |
| MULTILINE | 8 | मल्टीलाइन मोड सक्षम करता है। |
| शाब्दिक | 16 | पैटर्न के शाब्दिक पार्सिंग को सक्षम करता है। |
| DOTALL | 32 | डॉट मोड को सक्षम करता है। |
| UNICODE_CASE | 64 | यूनिकोड-अवेयर केस फोल्डिंग को सक्षम करता है। |
| CANON_EQ | 128 | विहित तुल्यता को सक्षम करता है। |
| UNICODE_CHARACTER_CLASS | 256 | पूर्वनिर्धारित वर्ण वर्गों और POSIX वर्ण वर्गों के यूनिकोड संस्करण को सक्षम करता है। |
DOTALL संशोधक
एक रेगेक्स पैटर्न जहां एक डोटल संशोधक ( s साथ व्यक्त अधिकांश रेगेक्स जायके में) के व्यवहार को बदल देता है . एक नई रेखा (LF) प्रतीक से मेल करने के लिए इसे सक्षम करना:
/cat (.*?) dog/s
यह पर्ल शैली regex की तरह एक स्ट्रिंग से मेल खाएगी "cat fled from\na dog" कब्जा "fled from\na" समूह 1 में।
इनलाइन संस्करण: (?s) (जैसे (?s)cat (.*?) dog )
नोट : रूबी में, DOTALL संशोधक समतुल्य m , Regexp::MULTILINE संशोधक (जैसे /a.*b/m ) है।
नोट : जावास्क्रिप्ट एक डॉट संशोधक प्रदान नहीं करता है, इसलिए ए . कभी भी एक नई लाइन वर्ण से मेल खाने की अनुमति नहीं दी जा सकती। एक ही प्रभाव को प्राप्त करने के लिए, वर्कअराउंड आवश्यक है, जैसे सभी को प्रतिस्थापित करना . कैच-ऑल कैरेक्टर क्लास जैसे कि [\S\s] , या कुछ नहीं कैरेक्टर क्लास [^] (हालांकि, इस निर्माण को अन्य सभी इंजनों द्वारा एक त्रुटि के रूप में माना जाएगा, और इस प्रकार पोर्टेबल नहीं है)।
बहु संशोधक
एक अन्य उदाहरण एक MULTILINE संशोधक है (आमतौर पर m ध्वज के साथ व्यक्त किया जाता है (Oniguruma में नहीं (उदाहरण के लिए रूबी) जो कि DOTALL संशोधक को निरूपित करने के लिए m का उपयोग करता है) जो ^ और $ एंकर लाइन के प्रारंभ / अंत से मेल खाता है, न कि प्रारंभ / अंत से। पूरे तार की।
/^My Line \d+$/gm
My Line शुरू होने वाली सभी पंक्तियों को खोज लेंगे, फिर एक स्थान और लाइन छोर तक 1+ अंक होंगे।
इनलाइन संस्करण: (?m) (जैसे (?m)^My Line \d+$ )
नोट : Oniguruma (उदाहरण के लिए रूबी) में, और regexps का समर्थन करने वाले लगभग किसी भी टेक्स्ट एडिटर में, ^ और $ एंकर डिफ़ॉल्ट रूप से लाइन स्टार्ट / एंड पोजिशन को दर्शाते हैं। आपको दस्तावेज़ / स्ट्रिंग अंत को दर्शाने के लिए पूरे दस्तावेज़ / स्ट्रिंग प्रारंभ और \z को परिभाषित करने के लिए \A का उपयोग करने की आवश्यकता है। \Z और \z बीच का अंतर यह है कि पूर्व स्ट्रिंग के अंत में अंतिम न्यूलाइन (LF) प्रतीक से पहले मेल कर सकता है (जैसे /\Astring\Z/ "string\n" में एक मैच मिलेगा) (को छोड़कर) पायथन, जहां \Z व्यवहार \z और \z लंगर के बराबर नहीं है) समर्थित नहीं है।
IGNORE CASE संशोधक
आम संशोधक मामले की अनदेखी करने के लिए है i :
/fog/i
Fog , foG , आदि से मेल foG ।
संशोधक का इनलाइन संस्करण दिखता है (?i) ।
टिप्पणियाँ:
जावा में, डिफ़ॉल्ट रूप से, केस-असंवेदनशील मिलान मानता है कि केवल US-ASCII चारसेट में वर्णों का मिलान किया जा रहा है। यूनिकोड- UNICODE_CASE केस-असंवेदनशील मिलान को इस ( CASE_INSENSITIVE ) ध्वज के साथ UNICODE_CASE ध्वज निर्दिष्ट करके सक्षम किया जा सकता है । (उदाहरण Pattern p = Pattern.compile("YOUR_REGEX", Pattern.CASE_INSENSITIVE | Pattern.UNICODE_CASE); )। इस पर कुछ और जावा रेजेक्स में केस-इनसेंसिटिव मैचिंग में पाए जा सकते हैं। इसके अलावा, UNICODE_CHARACTER_CLASS का उपयोग यूनिकोड से मेल खाने के लिए किया जा सकता है।
VERBOSE / COMMENT / IgnorePatternWhitespace संशोधक
संशोधक जो बेहतर पठनीयता के लिए इसे प्रारूपित करने के लिए और # साथ शुरू होने वाली टिप्पणियों की अनुमति देने के लिए पैटर्न के कुछ हिस्सों के अंदर व्हाट्सएप का उपयोग करने की अनुमति देता है:
/(?x)^ # start of string
(?=\D*\d) # the string should contain at least 1 digit
(?!\d+$) # the string cannot consist of digits only
\# # the string starts with a hash symbol
[a-zA-Z0-9]+ # the string should have 1 or more alphanumeric symbols
$ # end of string
/
एक स्ट्रिंग का उदाहरण: #word1here । ध्यान दें कि # प्रतीक एक शाब्दिक # जो एक पैटर्न का हिस्सा है, को प्रदर्शित करने के लिए बच गया है।
नियमित अभिव्यक्ति पैटर्न में अनस्टैप्ड व्हाइट स्पेस को नजरअंदाज कर दिया जाता है, इसे पैटर्न का हिस्सा बनाने के लिए इसे छोड़ दें।
आमतौर पर, वर्ण वर्गों ( [...] ) के अंदर व्हाट्सएप को जावा को छोड़कर शाब्दिक व्हाट्सएप के रूप में माना जाता है।
इसके अलावा, यह ध्यान देने योग्य है कि पीसीआरई, .NET, पायथन, रूबी ओनिगुरुमा, आईसीयू, बूस्ट रेगेक्स फ्लेवर में से कोई एक का उपयोग कर सकते हैं (?#:...)
स्पष्ट कैप्चर संशोधक
यह एक .NET रेगेक्स विशिष्ट संशोधक है जिसे n साथ व्यक्त किया गया है। जब उपयोग किया जाता है, तो अनाम समूह (जैसे (\d+) ) कैप्चर नहीं किए जाते हैं। केवल वैध कैप्चर को स्पष्ट रूप से समूहों का नाम दिया गया है (उदाहरण के लिए (?<name> subexpression) )।
(?n)(\d+)-(\w+)-(?<id>\w+)
पूरे 123-1_abc-00098 से मेल 123-1_abc-00098 , लेकिन (\d+) और (\w+) परिणामी ऑब्जेक्ट में समूह नहीं बनाएंगे। एकमात्र समूह ${id} । डेमो देखें।
यूनिकोड संशोधक
UNICODE संशोधक, जिसे आमतौर पर u (PHP, Python) या U (Java) के रूप में व्यक्त किया जाता है, रेगेक्स इंजन को पैटर्न और इनपुट स्ट्रिंग को यूनिकोड स्ट्रिंग्स और पैटर्न के रूप में व्यवहार करता है, पैटर्न शॉर्टहैंड क्लास जैसे \w , \d , \s बनाते हैं। , आदि यूनिकोड-जागरूक।
/\A\p{L}+\z/u
1 या अधिक यूनिकोड अक्षरों से मिलकर स्ट्रिंग्स का मिलान करने के लिए PHP रेगेक्स है। रेगेक्स डेमो देखें।
ध्यान दें कि PHP में , /u संशोधक PCRE इंजन को UTF8 स्ट्रिंग्स ( PCRE_UTF8 क्रिया को चालू करके) के रूप में स्ट्रिंग्स को हैंडल करने में सक्षम बनाता है और पैटर्न में शॉर्टहैंड कैरेक्टर क्लासेस को यूनिकोड से अवगत कराता है ( PCRE_UCP क्रिया को सक्षम PCRE_UCP , pcre.org पर और देखें) ।
पैटर्न और विषय के तार को UTF-8 के रूप में माना जाता है। यह संशोधक PHP 4.1.0 से अधिक या यूनिक्स पर और PHP 4.2.3 से win32 पर उपलब्ध है। UTF-8 पैटर्न और विषय की वैधता PHP 4.3.5 के बाद से जाँच की जाती है। अमान्य विषय के कारण कुछ भी मिलान करने के लिए preg_ * फ़ंक्शन होगा; एक अवैध पैटर्न स्तर E_WARNING की त्रुटि को ट्रिगर करेगा। पांच और छह ऑक्टेट UTF-8 अनुक्रम PHP 5.3.4 के बाद से अमान्य माने जाते हैं (प्रतिक्रिया। PCRE 7.3 2007-08-28); पूर्व में जिन्हें वैध UTF-8 माना गया है।
Python 2.x में, re.UNICODE केवल पैटर्न को ही प्रभावित करता है: Make \w , \W , \b , \B , \d , \D , \s और \S जो यूनिकोड वर्ण गुण डेटाबेस पर निर्भर हैं।
एक इनलाइन संस्करण: (?u) पायथन में, (?U) जावा में। उदाहरण के लिए:
print(re.findall(ur"(?u)\w+", u"Dąb")) # [u'D\u0105b']
print(re.findall(r"\w+", u"Dąb")) # [u'D', u'b']
System.out.println("Dąb".matches("(?U)\\w+")); // true
System.out.println("Dąb".matches("\\w+")); // false
PCRE_DOLLAR_END केवल संशोधक
PCRE- अनुरूप PCRE_DOLLAR_ENDONLY संशोधक जो स्ट्रिंग के बहुत अंत में $ लंगर मैच बनाता है ( स्ट्रिंग में अंतिम नई रेखा से पहले स्थिति को छोड़कर)।
/^\d+$/D
के बराबर है
/^\d+\z/
और एक पूरे स्ट्रिंग से मेल खाता है जिसमें 1 या अधिक अंक हैं और "123\n" मेल नहीं खाएगा, लेकिन "123" से मेल खाएगा।
PCRE_ANCHORED संशोधक
एक अन्य पीसीआर-अनुरूप संशोधक /A संशोधक के साथ व्यक्त किया गया। यदि यह संशोधक सेट किया गया है, तो पैटर्न को "एंकर" करने के लिए मजबूर किया जाता है, अर्थात यह केवल स्ट्रिंग की शुरुआत में मिलान करने के लिए विवश है जिसे खोजा जा रहा है ("विषय स्ट्रिंग")। यह प्रभाव पैटर्न में उपयुक्त निर्माणों द्वारा भी प्राप्त किया जा सकता है, जो कि पर्ल में करने का एकमात्र तरीका है।
/man/A
के समान है
/^man/
PCRE_UNGREEDY संशोधक
PCRE- अनुरूप PCRE_UNGREEDY ध्वज /U साथ व्यक्त किया गया। यह लालच को एक पैटर्न के अंदर बदल देता है: /a.*?b/U = /a.*b/ और इसके विपरीत।
PCRE_INFO_JCHANGED संशोधक
एक और PCRE संशोधक जो डुप्लिकेट नामित समूहों के उपयोग की अनुमति देता है।
नोट : केवल इनलाइन संस्करण समर्थित है - (?J) , और पैटर्न की शुरुआत में रखा जाना चाहिए।
यदि तुम प्रयोग करते हो
/(?J)\w+-(?:new-(?<val>\w+)|\d+-empty-(?<val>[^-]+)-collection)/
"वैल" समूह मान कभी खाली नहीं होंगे (हमेशा सेट होंगे)। एक समान प्रभाव हालांकि शाखा रीसेट के साथ प्राप्त किया जा सकता है।
PCRE_EXTRA संशोधक
एक PCRE संशोधक जो एक पैटर्न में किसी भी बैकस्लैश को एक पत्र के बाद एक त्रुटि का कारण बनता है जिसका कोई विशेष अर्थ नहीं है। डिफ़ॉल्ट रूप से, बिना किसी विशेष अर्थ वाले एक पत्र के बाद एक बैकस्लैश को शाब्दिक माना जाता है।
उदाहरण के लिए
/big\y/
bigy मैच होगा, लेकिन
/big\y/X
एक अपवाद फेंक देंगे।
इनलाइन संस्करण: (?X)