2012-11-10 9 views
8

विकिपीडिया says जो विस्तारित रेगेक्स "बैकरेरेंस के लिए समर्थन छोड़ दिया" है, इसलिए "मूल" रेगेक्स मोड का उपयोग उनको सक्षम करने के लिए किया जाना चाहिए। हालांकि, ऐसा लगता है कि कई कार्यान्वयन विस्तारित regexes के लिए समर्थन बैक्रेरेंस करते हैं। उदाहरण के लिए, उबंटू सटीक पर जीसीसी 4.6 के साथ, वे समर्थित हैं। फ्रीबीएसडी कार्यान्वयन seem to केवल मूल मोड में उनका समर्थन करता है।विस्तारित regexes समर्थन वापस संदर्भ करते हैं?

Boost says (और विकिपीडिया से सहमत है) कि बैक्रेरेंस विस्तारित regexes के लिए समर्थित नहीं हैं, लेकिन बूस्ट :: Regex उन्हें एक एक्सटेंशन के रूप में जोड़ता है।

क्या यह मानक का एक खराब परिभाषित हिस्सा है जिसे प्रत्येक कार्यान्वयन द्वारा अलग-अलग व्याख्या किया जाता है?

+0

विकिपीडिया हमेशा विश्वसनीय जानकारी के लिए सबसे अच्छा स्रोत नहीं है। मुझे कोई कारण नहीं दिखता कि किसी भी कार्यान्वयन/पर्यावरण में विस्तारित रेगेक्स में बैकरेफर को समर्थित क्यों नहीं किया जाना चाहिए। POSIX मानक विस्तारित नियमित अभिव्यक्तियों के लिए बैक-रेफरेंस का समर्थन नहीं करता है, लेकिन मुझे इस "मानक" का पालन करने वाले किसी भी कार्यान्वयन को नहीं पता है। –

+0

+ Ωmega स्पष्ट रूप से फ्रीबीएसडी कार्यान्वयन इस का पालन करते हैं। "Re_format" मैनपेज को पढ़ना, विस्तारित मोड –

+0

में बैकरेरेंस का समर्थन करने के लिए एक विशेष "उन्नत" मोड जोड़ा गया था ऐसा लगता है कि फ्रीबीएसडी में 'egrep' उन्हें समर्थन देता है। –

उत्तर

5

जैसा कि अन्य ने पहले से ही बताया है, यह स्पष्ट है कि पॉज़िक्स ईआरई बैक-रेफरेंस का समर्थन नहीं करता है।

औचित्य OpenGroup बेस विनिर्देशों अंक के रूप में दी 7 eres को वापस-संदर्भ जोड़कर नहीं करने के लिए दिया जाता है:

यह सुझाव दिया गया है कि, इसके अलावा में भाव, बैक संदर्भ ('अंतराल से \ n ') को ईआरई में भी जोड़ा जाना चाहिए। इसे मानक डेवलपर्स द्वारा सर्वसम्मति कम करने की संभावना के कारण खारिज कर दिया गया था।

उद्धरित से: Rationale: Base Definitions: Extended Regular Expressions

इस सीमा के लिए प्राथमिक कारण POSIX eres एक नियमात्मक परिमित ऑटोमेटा (DFA) करने के लिए परिवर्तित किया, और वास्तव में यूनिक्स में eres के मूल कार्यान्वयन एक के रूप में किया गया था अनुमति देने के लिए है DFA। डीएफए का उपयोग कार्यान्वयन के प्रदर्शन के बारे में गारंटी देने की अनुमति देता है। बैक रेफरेंस के साथ पैटर्न मिलान (एक असंबद्ध संख्या) एक एनपी-हार्ड समस्या है, और शायद एक एनपी-पूर्ण समस्या भी है। ईएसई के लिए बैक-रेफरेंस प्रस्तावित किए जाने पर पॉज़िक्स मानकों की समिति में सर्वसम्मति कभी नहीं पहुंच पाई क्योंकि इससे सभी कंपनियों को मूल यूनिक्स कार्यान्वयन का उपयोग करके उनके कोड को गैर-निर्धारिती कार्यान्वयन में बदलने और उनकी प्रदर्शन गारंटी को छोड़ने के लिए मजबूर किया जाएगा, और कुछ उन कंपनियों में से समिति के सदस्य थे।

यह भी ध्यान दिया गया है कि आरईएस में बैक-रेफरेंस या तो उपयोगकर्ताओं या कार्यान्वयनकर्ताओं के लिए सहज नहीं हैं, और वास्तव में वे अब से अधिक बार भ्रम पैदा कर चुके हैं। उदाहरण के लिए देखें में RE-Interpretation: The Dark Corners

नोट दिए गए उदाहरण: वापस संदर्भ आर ई में इस तरह के sed के रूप में उपकरण में प्रतिस्थापन पाठ में उप पैटर्न के लिए संदर्भ के रूप में ही नहीं हैं।

4

IEEE/Open Group standard के अनुसार विस्तारित नियमित अभिव्यक्ति बैक्रेरेंस (धारा 9.5.1) का समर्थन नहीं करती है हालांकि कई वास्तविक-दुनिया कार्यान्वयन करते हैं।

1

POSIX.1-2008 standard के अनुसार, केवल मूल नियमित अभिव्यक्तियां पीछे-संदर्भों का समर्थन करती हैं। Section 9.3.6 वर्णन करता है कि वे बीआरई में कैसे काम करते हैं। विस्तारित नियमित अभिव्यक्ति अनुभाग में उनका उल्लेख नहीं है, और धारा 9.5.1 में Grammar Lexical Conventions का कहना है कि बैक-रेफरेंस टोकन केवल बीआरई पर लागू होते हैं।

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