2012-12-22 64 views
5

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

/foo[1-9]* 

काम करता है के रूप में उम्मीद है, लेकिन नियमित अभिव्यक्ति

foo[1-9]+ 

/foo[1-9]\+ 

vim में के रूप में व्यक्त किया जाना चाहिए। किसी को पता है?

+1

मैं आपको यह नहीं बता सकता कि क्यों, लेकिन [यहां एक सूची है] (http://vimregex.com/#metacharacters) यदि आपको इसकी आवश्यकता हो तो बचने के लिए कौन से लोगों से बचें। मैं कल्पना करता हूं कि यह किसी तरह की पिछड़ा संगतता की बात है। शुरुआत में ही कुछ मेटा-वर्ण समर्थित थे और बाकी सब कुछ अक्षर था। और फिर उन्होंने अन्य मेटा-वर्ण जोड़े, लेकिन अभी भी पुराने पैटर्न चाहते थे (जिसमें 'शाब्दिक के रूप में '' 'शामिल हो सकता है) काम करने के लिए। तो सभी नए लोगों से बच जाना है। लेकिन यह सिर्फ एक जंगली अनुमान है। –

+0

नए रेगेक्स मेटाएक्टएक्टर्स के साथ पिछली तुलनात्मकता समझ में आ जाएगी। मैं उत्सुक हूं कि क्यों उन्होंने उपयोगकर्ताओं को मजबूर करने के लिए मजबूर नहीं किया कि अगर ऐसा होता है तो रेगेक्स को काफी मानकीकृत किया गया है। हालांकि इनपुट के लिए धन्यवाद! – Rhyok

उत्तर

22

ऐसा इसलिए है क्योंकि vim (वास्तव में vi) ने पेर्ल से पहले अपने स्वयं के रेगेक्स स्वाद का निर्माण किया था। यहां तक ​​कि पॉज़िक्स बीआरई और ईआरई wikipedia के बाद आया था। वे अभी भी अपना स्वाद बनाए रखते हैं इसलिए यह काफी अलग है।

उत्तर को और अधिक संसाधन बनाने के लिए यहां ed's wiki का उद्धरण दिया गया है।

संपादक मूल रूप से केन थॉम्पसन द्वारा में लिखा पीडीपी-11/20 में कोडांतरक 1971 किया गया था। एड की कई विशेषताएं Qed से बर्कले 3 में कैलिफोर्निया के अल्मा माटर विश्वविद्यालय से आया था, थॉम्पसन क्यूड से बहुत परिचित था, और इसे सीटीएसएस और मल्टीक्स सिस्टम पर फिर से कार्यान्वित किया गया था। qed के उनके संस्करण नियमित अभिव्यक्ति लागू करने वाले पहले व्यक्ति थे। हालांकि नियमित अभिव्यक्तियां एड का हिस्सा हैं, लेकिन उनके कार्यान्वयन qed में उससे काफी कम सामान्य है।

एड के पहलुओं को प्रभावित करने के पूर्व, जो बारी में vi पैदा की पर चला गया। गैर-इंटरैक्टिव यूनिक्स कमांड grep qed और बाद के संस्करण के सामान्य विशेष उपयोगों से प्रेरित था, जहां कमांड g/re/p का अर्थ है वैश्विक स्तर पर नियमित अभिव्यक्ति की खोज करें और वाली लाइनों को मुद्रित करें। यूनिक्स स्ट्रीम एडिटर, sed ने क्यूड की कई स्क्रिप्टिंग सुविधाओं को लागू किया जो यूनिक्स पर एड द्वारा समर्थित नहीं थे। बदले में sed प्रोग्रामिंग भाषा एडब्ल्यूके के डिजाइन को प्रभावित किया - जो पर्ल के प्रेरित पहलुओं को प्रेरित करता है।

इन दो पैराग्राफ में बहुत सारी जानकारी है! काश मैं इसे सब बोल्ड कर सकता था। कुछ मुख्य बातें,

  • केन थॉम्पसन ed लिखा था 1971 ed वास्तव में qed के reimplentation था।
  • केन ने qed के अपने संस्करण में नियमित अभिव्यक्ति जोड़ा जो वास्तव में ed है।
  • 1976 विलियम जोय (बिल जॉय के रूप में जाना जाता है) में, ed से प्रेरित होकर 1976 में लिखा था exwikipedia
  • बिल जॉय एक पंक्ति संपादक के लिए दृश्य मोड के रूप में vi लिखा बुलाया exwikipedia
  • grep प्रेरित था qed और बाद में ed के विशेष उपयोग द्वारा।
  • sed QED की पटकथा सुविधाओं है कि यूनिक्स
  • sed पर एड द्वारा समर्थित नहीं की गई थी, के रूप में लागू किया गया था awk के डिजाइन को प्रभावित किया।

तो vi नियमित अभिव्यक्ति ed में थी जो 1 9 71 में लिखी गई थी। यह किसी अन्य नियमित अभिव्यक्ति स्वाद से काफी पहले है।

+0

आह, मैं देखता हूं। हुह। मैंने हमेशा सोचा था कि पॉज़िक्स ईआरई रेगेक्स के लिए कठिन और तेज़ मानक था और कभी नहीं जानता था कि यह आज तक विभिन्न स्वादों में आया है। ऐसा लगता है, [इस] (http://www.autohotkey.com/docs/misc/RegEx-QuickRef.htm) जैसे पृष्ठों के साथ, जो अधिक उचित रूप से एक बड़े से prefaced होना चाहिए "यह मार्गदर्शिका POSIX लागू नियमित अभिव्यक्तियों के लिए लागू होती है केवल।" उत्तर आदमी के लिए धन्यवाद! – Rhyok

+0

मेरा उत्तर थोड़ा सा अपडेट करें। समयरेखा देखें आपको बहुत सारे विचार मिलेंगे। –

+1

महान ऐतिहासिक अवलोकन; धन्यवाद! –