2014-06-14 1 views
5

पर्ल में एक सुंदर संशोधक /x है जो नियमित अभिव्यक्तियों में सफेद जगह को अनदेखा करता है। ऐसा कहने के लिए नहीं है कि यह व्हाइटस्पेस पर ध्यान दिए बिना मेल खाता है, बल्कि यह तब तक रेजेक्स की व्याख्या में सफेद जगह को छोड़ देता है जब तक बच निकला नहीं जाता है।नियमित अभिव्यक्तियों में पर्ल/एक्स (व्हाइटस्पेस को अनदेखा करें) मोड के समतुल्य

आईई। ^x[0-7][x-z][ABCpuq*]*$/x मोड में ^x [0-7] [x-z] [ABCpuq*]*$ के रूप में समकक्ष लिखा जा सकता है लेकिन अधिक आसानी से लिखा जा सकता है।

grep और इसके जैसे आर में ऐसा कोई मोड नहीं लगता है, लेकिन उनके पर्ल संगतता को देखते हुए, पास करने का कोई विकल्प है? मैंने कुछ विकल्पों की कोशिश की है लेकिन ऐसी कोई किस्मत नहीं है।

> grepl("^x[0-7][x-z][ABCpuq*]*$", "x5yuuA") 
[1] TRUE 
> grepl("^x [0-7] [x-z][ABCpuq*]*$", "x5yuuA") 
[1] FALSE 
> grepl("^x [0-7] [x-z][ABCpuq*]*$", "x5yuuA", perl=TRUE) 
[1] FALSE 
> grepl("^x [0-7] [x-z][ABCpuq*]*$/x", "x5yuuA", perl=TRUE) 
[1] FALSE 

माध्यमिक प्रश्न: आर के पर्ल-स्टाइल रेगेक्स सी सी पीसीआरई लाइब्रेरी पर भरोसा कैसे करते हैं? ऐसा लगता है कि PCRE_Extended setting bit है जो व्हाइटस्पेस को अनदेखा कर देता है।

+0

एफवाईआई, संपादित करें: माध्यमिक प्रश्न के लिए, आर मैनुअल को रेफरी जोड़ा गया। – zx81

उत्तर

6

फ्री-रिक्ति मोड

आर में, एक पूरे अभिव्यक्ति के लिए मुक्त रिक्ति मोड का उपयोग करने, PCRE मोड (perl=TRUE) में regex की शुरुआत में (?x) मोड संशोधक पॉप।

उदाहरण: (? एक्स)

grepl("(?x) # free spacing\r\n\\d # a digit\r\n[bc] # b or c", subject, perl=TRUE); 

संशोधक अधिकतर regex स्वादों में काम करता है। कुछ अपवाद: जावास्क्रिप्ट, MySQL, ओरेकल, वीबीस्क्रिप्ट, XPath।

पर्ल मोड और PCRE

कितनी निकटता से पर्ल मोड PCRE पर भरोसा करता है? पूरी तरह से। = सही तर्क grep के लिए, regexpr, gregexpr, उप, gsub और PCRE लाइब्रेरी में strsplit स्विच कि नियमित रूप से लागू करता

पर्ल: (यह एक अच्छी बात है नीचे देखें।।)

R manual से पर्ल 5.10 के रूप में, केवल कुछ मतभेदों के साथ समान वाक्यविन्यास और अर्थशास्त्र का उपयोग करके अभिव्यक्ति पैटर्न मिलान।

कुछ शोधन

  • आप regex में किसी भी बिंदु पर (?x) चालू कर सकते हैं
  • आप इसे (?-x)
  • साथ बंद कर सकते हैं आप इसे का केवल एक सेट के लिए चालू कर सकते हैं कोष्ठक, (?x: \w \d)

पीसीआरई

पीसीआरई तक पहुंच रखने की अच्छी बात है।

पीसीआरई पाइथन और पर्ल के लिए .NET, मैथ्यू बार्नेट के regex मॉड्यूल के साथ-साथ बहुत अच्छे पर्ल-स्टाइल इंजन के शीर्षक के लिए दावेदारों में से एक है।इसका व्यापक रूप से उच्च दृश्यता वातावरण (अपाचे, PHP, नोटपैड ++) में उपयोग किया जाता है, इसलिए इसे बहुत ध्यान मिलता है।

  • Recursion और सबरूटीन कॉल
  • \K "आउट रखें" क्या लौटे मैच
  • से अब तक का मिलान होने पर नियंत्रण बैकट्रेस: ​​अन्य व्यवहार करता है के अलावा, यह आप इस तरह के रूप में विदेशी सुविधाओं तक पहुँच प्रदान (*SKIP)(*F) और दूसरों
  • शाखा रीसेट
  • (?(DEFINE)... है, जो मदद कर सकते हैं एक जटिल regex refactor (आप विभिन्न स्थानों पर कब्जा समूह # 1 स्थापित करने के लिए अनुमति देता है)
  • कंडीशनर।

पीसीआरई में क्या गुम है?

  • (नेट के रूप में) अनंत-चौड़ाई lookbehinds एक भयानक अलावा होगा।
  • तो .NET वास्तव में मजेदार होगा balancing groups। ऐसा शायद कभी नहीं होगा क्योंकि संतुलन समूहों को अक्सर रिकर्सन के गरीब भाई के रूप में देखा जाता है ... हालांकि, यह आपको अन्य चीजों को करने की अनुमति देता है, जैसे आसानी से काउंटर स्थापित करना।
  • कैरेक्टर क्लास घटाव।
  • कुछ बार्नेट के regex मॉड्यूल से अस्पष्ट मिलान से चूक सकते हैं (टिप्पणी नहीं कर सकते क्योंकि मैंने उस सुविधा का उपयोग नहीं किया है)।
+0

धन्यवाद। इसे थोड़ी देर के लिए गिरने के लिए छोड़ देंगे लेकिन ऐसा लगता है कि यह पूरी तरह से जवाब दिया है। पीसीआर मैनुअल सेक्शन मैंने '(? X)' से जुड़ा हुआ है और इस प्रकार इसका जवाब था, लेकिन मुझे लगता है कि यह उस पर छोड़ दिया गया है, यह पहचान नहीं है कि यह एक स्विच था जिसे रेगेक्स के साथ ऑनलाइन पारित किया जा सकता था। –

+2

@ एरिब। फ्राइडमैन कुछ उल्लेखनीय परिशोधन: 1. आप रेगेक्स में किसी भी बिंदु पर '(? X) 'चालू कर सकते हैं, 2. आप इसे' (? -x)', 3 के साथ बंद कर सकते हैं। आप इसे चालू कर सकते हैं '(? x: \ w \ d)' के साथ कोष्ठक के केवल एक सेट के लिए। इसके अलावा पीसीआरई पाइथन के लिए .NET, पर्ल और मैथ्यू बार्नेट के 'रेगेक्स' मॉड्यूल के साथ शीर्ष स्थान के लिए एक प्रतियोगी, वहां पर सबसे अच्छी रेगेक्स पुस्तकालयों में से एक है। – zx81

+1

मैं सिर्फ यह ध्यान रखना चाहता हूं कि 'पर्ल! = पीसीआरई'। [अच्छा पठन] (http://www.manpagez.com/man/3/pcrecompat/) – HamZa

संबंधित मुद्दे