एक नियमित अभिव्यक्ति की परिभाषा क्या है?


10

मैं हाल ही में घोटी के साथ एक दोस्ताना बहस में पड़ गया कि इस सवाल के मेरे जवाब के लिए टिप्पणियों में एक नियमित अभिव्यक्ति क्या है । मैंने दावा किया कि निम्नलिखित एक नियमित अभिव्यक्ति है:

`[Rr]eading[Tt]est[Dd]ata`

घोटी ने असहमति जताई, यह दावा किया कि इसके बजाय एक फ़ाइल ग्लोब है। ग्लोब विकिपीडिया दावा है कि (जोर मेरा) पर पेज:

क्लेने स्टार के लिए दस्ताने में वाक्यविन्यास शामिल नहीं है जो अभिव्यक्ति के पूर्ववर्ती भाग के कई दोहराव की अनुमति देता है; इस प्रकार उन्हें नियमित अभिव्यक्ति नहीं माना जाता है, जो किसी भी परिमित वर्णमाला पर नियमित भाषाओं के बड़े सेट का वर्णन कर सकता है।

हालांकि, इस दावे के लिए कोई उद्धरण नहीं है, यह दर्शाता है कि यह केवल एक विशेष विकिपीडिया संपादक की राय है।

एकल यूनिक्स ® विशिष्टता, संस्करण 2 , राज्यों एक बुनियादी नियमित अभिव्यक्ति (BRE) एक भी चरित्र हो सकता है कि:

एक साधारण चरित्र एक BRE है जो स्वयं से मेल खाता है: BRE विशेष वर्णों में सूचीबद्ध BRE विशेष वर्णों को छोड़कर, समर्थित वर्ण सेट में कोई भी वर्ण।

तो, * निक्स दुनिया में एक नियमित अभिव्यक्ति की परिभाषा क्या है, और क्या यह परिभाषा फ़ाइल ग्लब्स को बाहर करती है?


6
सैद्धांतिक सीएस में, एक नियमित अभिव्यक्ति एक नियमित भाषा का वर्णन है, जो कि एक परिमित ऑटोमेटन द्वारा पहचानी जा सकती है। यूनिक्स दुनिया में, यह बहुत अधिक जटिल है, और इसकी कोई एक परिभाषा नहीं है। वहाँ POSIX कल्पना में 2 regex बोलियों हैं: बढ़ाया और बुनियादी है, जो उपकरणों के द्वारा उपयोग किया जाता है की तरह है grep, sedऔर awk। विम अपनी विविधता का उपयोग करता है, जैसा कि पर्ल करता है।
jw013

तो, कि परिभाषा के द्वारा, एक फ़ाइल ग्लोब है एक BRE है ना?
terdon

2
नहीं, एक फ़ाइल ग्लोब एक BRE नहीं है - आपको क्या लगता है कि यह क्या है? यदि आप BRE का POSIX विवरण और ग्लोबिंग का POSIX विवरण पढ़ते हैं, तो आप देखेंगे कि वे समान नहीं हैं। उदाहरण के लिए, *BRE और ग्लब्स में दो अलग-अलग अर्थ हैं। नोट: मुझे नहीं लगता कि शब्द ग्लोब का इस्तेमाल POSIX कल्पना में कहीं भी किया जाता है - इसे पैटर्न मिलान कहा जाता है और शेल भाषा के अध्याय में वर्णित है।
jw013

जवाबों:


10

के रूप में lk- कहा, का विकल्प एक ग्लोब, नहीं एक नियमित अभिव्यक्ति के रूप में तर्क व्यवहार करेगा।-namefind

क्या एक स्ट्रिंग को ग्लोब या रेगेक्स के रूप में व्याख्या किया गया है या सिर्फ एक सादे स्ट्रिंग पर निर्भर करता है कि व्याख्या करने के लिए क्या उपयोग किया जा रहा है। यह संदर्भ की बात है। आपके उदाहरण में स्ट्रिंग का [Rr]eading[Tt]est[Dd]ataमूल्यांकन कई तरीकों से किया जा सकता है, लेकिन यह इस बात पर निर्भर करता है कि आप इसका उपयोग कैसे कर रहे हैं। इसे एक ग्लोब के रूप में उपयोग करें, यह एक ग्लोब है। रेगेक्स के रूप में इसका उपयोग करें, यह एक रेगेक्स है। सवाल के मामले में जहां यह उत्पन्न हुआ था , ओपी ने स्ट्रिंग को रेगेक्स के रूप में वर्णित किया। इसलिए हम मान सकते हैं कि वह इसे एक रेक्स के रूप में व्याख्या करने की योजना बना रहा था।

एक एकल चरित्र भी एक रेक्सक्स हो सकता है, बिल्कुल। यह एक तार भी हो सकता है, और यह एक गोला भी हो सकता है। यदि आप चाहें तो इसे बाइट या टिनींट के रूप में व्याख्या किया जा सकता है। यह सब संदर्भ पर निर्भर करता है।

विभिन्न रूपों में नियमित अभिव्यक्तियों के लिए कई विनिर्देश हैं। BRE और ERE अच्छी तरह से प्रलेखित हैं। PCRE कार्यक्षमता के स्कैड जोड़ता है। कई रेगेक्स दुभाषियों को लागू करेगा, उदाहरण के लिए, "ईआरई के सभी और पीसीआरई के कुछ"। या वे कुछ सुविधा ईआरई माइनस करेंगे। यदि आप औपचारिक विशिष्टताओं के आधार पर जाते हैं, तो कई उपकरण रीगेक्स-समर्थन का दावा करते हैं जो गलत या अपूर्ण है। विवरणों को जानने से आप अपने रेगेक्स का मूल्यांकन करने वाले उपकरण के भीतर उपलब्ध कार्यक्षमता के संग्रह के लिए अपने समाधानों को अनुकूलित कर सकते हैं।

इसलिए ... यदि आप ऐसी परिभाषाएँ खोज रहे हैं जो "ग्लोब" को बाहर कर दें, तो आप इसे गलत दृष्टिकोण से देख रहे हैं। यह निर्धारित किया जाता है कि आप इसका उपयोग कैसे करते हैं


7

[Rr]eading[Tt]est[Dd]ataएक ग्लोब और एक नियमित अभिव्यक्ति दोनों के रूप में मान्य प्रतीत होता है, और मेरा मानना ​​है कि दोनों व्याख्याओं में समान "अर्थ" है। हालाँकि, का -nameविकल्पfind तर्क को एक ग्लोब के रूप में जाएगा, न कि एक नियमित अभिव्यक्ति।

यदि आप एक तर्क की आपूर्ति करते हैं तो यह अंतर मायने रखेगा foo* , जो एक मान्य ग्लोब और एक वैध नियमित अभिव्यक्ति है, लेकिन व्याख्या के आधार पर अलग-अलग अर्थ हैं:

यदि एक ग्लोब पैटर्न के रूप में व्याख्या, इस से मेल खाएगी foo, foobar, foo123, आदि

यदि एक नियमित अभिव्यक्ति के रूप में व्याख्या, इस से मेल खाएगी fo, foo, foooooo, आदि


धन्यवाद, मैं एक ग्लोब पैटर्न और एक रेगेक्स के बीच अंतर देखता हूं। हालांकि रेगेक्स की औपचारिक परिभाषा क्या है?
terdon

1
मुझे नहीं पता कि "रेगुलर एक्सप्रेशंस" के लिए एक ही परिभाषा है क्योंकि इस शब्द का आमतौर पर इस्तेमाल होता है। POSIX रेगुलर एक्सप्रेशंस या पर्ल रेगुलर एक्सप्रेशंस जैसे अलग-अलग सिंटैक्स स्पेसिफिकेशन्स हैं, जिनमें अन्य "फीचर्स" जैसे बैकरेफर या लुकहेड शामिल हैं। ये अब सख्त अर्थों में नियमित अभिव्यक्ति नहीं हो सकती हैं (नियमित औपचारिक भाषाओं के संदर्भ में) लेकिन फिर भी इन्हें इस तरह से संदर्भित किया जाता है।
lk-
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.