वह ऐतिहासिक कारणों से है।
ed
70 के दशक की शुरुआत में यूनिक्स में 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 या अन्य कार्यान्वयनों द्वारा समर्थित नहीं है) और आप (.)\1
GNU में कर सकते हैं egrep
(हालाँकि यह POSIX नहीं है या GNU सहित कई अन्य कार्यान्वयनों द्वारा समर्थित है awk
)।
\x
ऑपरेटरों को जोड़ना केवल एक पिछड़े संगत तरीके से अधिक ऑपरेटरों को जोड़ने का तरीका नहीं है। उदाहरण के लिए, perl
प्रयुक्त (?...)
। यह अभी भी ईआरई के साथ पिछड़ा संगत है क्योंकि ईआरई में (?=...)
मान्य नहीं है, उसी के लिए .*?
। vim
इसी तरह के ऑपरेटरों के लिए इसे पेश करके \@=
या .\{-}
उदाहरण के लिए अलग तरह से किया ।