वह ऐतिहासिक कारणों से है।
ed70 के दशक की शुरुआत में यूनिक्स में Rexxp को पहली बार पेश किया गया था। हालांकि edपर आधारित था qedजिसका कार्यान्वयन एक ही लेखकों द्वारा और अधिक जटिल regexp समझ में आया, edकेवल समझा ^, $, [...], ., *और \ऊपर के सभी से बचने के लिए।
अब, जब अधिक संचालकों की जरूरत पड़ी, तो पिछड़ी अनुकूलता को तोड़े बिना उन्हें पेश करने के लिए एक रास्ता तलाशना पड़ा। एक स्क्रिप्ट का उपयोग करने के लिए इस्तेमाल करते हैं s edआदेश के रूप में s/foo() {/foo (var) {/gकी सभी आवृत्तियों को बदलने के लिए foo() {साथ foo(var) { हैं और आप एक शुरू की (या {ऑपरेटर, कि है कि स्क्रिप्ट टूट जाएगा।
हालाँकि कोई भी स्क्रिप्ट नहीं चलेगी s/foo\(\) {/foo\(var\) {/, क्योंकि यह वही है s/foo() {/foo(var) {/और भागने का कोई कारण (नहीं था क्योंकि यह आरई ऑपरेटर नहीं था। इसलिए एक नया \(या \{ऑपरेटर शुरू करने से पिछड़ी अनुकूलता नहीं टूटती है क्योंकि पुराने सिंटैक्स का उपयोग करके किसी मौजूदा स्क्रिप्ट को तोड़ने की संभावना नहीं है।
तो, यह वही किया गया था। बाद में, \(...\)शुरू में केवल s edकमांड के लिए जोड़ा गया जैसे कि चीजों को करने के लिए s/foo\(.\)/\1bar/और बाद में grep '\(.\)\1'(लेकिन जैसी चीजें नहीं देनी चाहिए \(xx\)*)।
UnixV7 (1979, इसलिए लगभग एक दशक बाद) में, नए egrepऔर awkउपयोगिताओं में नियमित अभिव्यक्ति का एक नया रूप जोड़ा गया, जिसे विस्तारित नियमित अभिव्यक्ति कहा जाता है (क्योंकि वे नए उपकरण हैं, टूटने के लिए कोई पिछड़ी संगतता नहीं है)। अंत में, यह केन थॉम्पसन के प्राचीन qed(वैकल्पिक ऑपरेटर |, ग्रुपिंग (..)*) में उपलब्ध कार्यक्षमता के साथ प्रदान किया और जैसे कुछ ऑपरेटरों को जोड़ा ( +और ?मूल नियमित अभिव्यक्तियों की बैकएफ़ सुविधा नहीं थी)।
बाद में बीएसडी \<और \>( बीआरई \{और \}ईआरई दोनों में) जोड़े गए, और एसवाईएसवी केवल और बीआरएस में जोड़े गए ।
यह बहुत बाद तक नहीं है {और }एईआर में जोड़ा गया था, इस तरह की पिछड़ी संगतता को तोड़कर। हर किसी ने इसे नहीं जोड़ा। उदाहरण के लिए, awkसंस्करण 4.0.0 (2011) तक GNU ने समर्थन {नहीं किया जब तक कि POSIX अनुरूपता मोड में मजबूर नहीं किया गया।
जब जीएनयू grepजल्दी 90 के दशक में लिखा गया था, यह दोनों BSD और SysV से सभी उपहार (जैसे जोड़ा \<, {) और इसके बजाय BRE और ERE के लिए दो अलग-अलग regexp वाक्य रचना और इंजन होने का, दोनों में एक ही ऑपरेटरों लागू किया, केवल की BRE समकक्षों (, ?, {, +एक बैकस्लैश के साथ पहले किया जाना है (अन्य BRE कार्यान्वयन के साथ संगत होना करने के लिए)। इसीलिए आप .\+GNU में कर सकते हैं grep(हालाँकि यह POSIX या अन्य कार्यान्वयनों द्वारा समर्थित नहीं है) और आप (.)\1GNU में कर सकते हैं egrep(हालाँकि यह POSIX नहीं है या GNU सहित कई अन्य कार्यान्वयनों द्वारा समर्थित है awk)।
\xऑपरेटरों को जोड़ना केवल एक पिछड़े संगत तरीके से अधिक ऑपरेटरों को जोड़ने का तरीका नहीं है। उदाहरण के लिए, perlप्रयुक्त (?...)। यह अभी भी ईआरई के साथ पिछड़ा संगत है क्योंकि ईआरई में (?=...)मान्य नहीं है, उसी के लिए .*?। vimइसी तरह के ऑपरेटरों के लिए इसे पेश करके \@=या .\{-}उदाहरण के लिए अलग तरह से किया ।