क्यों इतने सारे नियमित अभिव्यक्ति संस्करण हैं? [बन्द है]


14

आज जब मैंने हमारी परियोजना के स्रोत कोड की समीक्षा की, तो मैंने पाया कि प्रत्येक पंक्ति के अंत में बहुत सारे अनावश्यक "रिक्त स्थान" और "टैब" हैं। इसलिए मैंने उन्हें नियमित अभिव्यक्ति के साथ हटाने का फैसला किया।

हालाँकि, मैंने पाया कि कमांड sed -i '/\s+$/d'काम नहीं करता है। जब तक मैंने कमांड को बदल दिया, तब तक see -ri '/\s+$/d'उसने मेरी अपेक्षा के अनुसार काम किया। के मैनुअल से sed, यह कहा गया है कि -rregexp विस्तारित आह्वान।

मैं असमंजस में हूँ, इतने सारे रेगेक्स वेरिएंट क्यों हैं? जैसे vim / emacs / perl / sed regexp। Regexp एक अद्वितीय उपयोगकर्ता इंटरफ़ेस क्यों नहीं दे सकता है?

जवाबों:


19

ऐतिहासिक कारणों से। "नियमित अभिव्यक्ति" वाक्य रचना की कोई एक परिभाषा नहीं है। एक नियमित अभिव्यक्ति की अवधारणा का वास्तविक सिंटैक्स से कोई लेना देना नहीं है जो औपचारिक रूप से इसका वर्णन करता है। लोग एक ही बात कहने के विभिन्न तरीकों के साथ आए हैं, इसलिए रेगेक्स सिंटैक्स की विभिन्न शैलियों।

हालाँकि, आप पाएंगे कि इन दिनों के आसपास परिभाषाओं के दो समूह हैं:

  1. POSIX नियमित अभिव्यक्ति जो बेसिक (BRE) और विस्तारित नियमित एक्सप्रेशन (ERE) को निर्दिष्ट करती है। भ्रम की शुरुआत होती है, उदाहरण के लिए, बेसिक रेगुलर एक्सप्रेशन\( \)एक समूह को सूचित करने के लिएउपयोगकरते हैं, और उसके लिए एक्सटेंडेड रेगुलर एक्सप्रेशन का उपयोग( )करते हैं।

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

आप अधिक जानकारी के लिए regex सिंटैक्स पर विकिपीडिया लेख देख सकते हैं ।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.