Bu tarihsel nedenlerden dolayı.
Regexp ilk olarak ed70'li yılların başlarında yardımcı programda Unix'te tanıtıldı . Gerçi eddayanıyordu qedgerçekleştirme aşamasında aynı yazarlar tarafından daha karmaşık Regexp'i anlaşılan, edsadece anlaşılmış ^, $, [...], ., *ve \yukarıdakilerin hepsi kaçmak için.
Şimdi, daha fazla operatöre ihtiyaç duyulduğunda, geriye dönük uyumluluğu bozmadan bunları tanıtmanın bir yolunun bulunması gerekiyordu. Bir komut dosyası kullanmak kullandıysanız s edolarak komutu s/foo() {/foo (var) {/gtüm örneklerini değiştirmek için foo() {birlikte foo(var) { ve bir tanıtılan (veya {operatörü, yani o senaryoyu kırar.
Ancak hiçbir komut dosyası yapmaz s/foo\(\) {/foo\(var\) {/, çünkü bu bir RE operatörü olmadığı s/foo() {/foo(var) {/için kaçmak için hiçbir neden yoktu (. Bu nedenle, yeni bir \(veya \{işleç eklemek, eski sözdizimini kullanarak mevcut bir komut dosyasını kırması pek olası olmadığından geriye dönük uyumluluğu bozmaz.
İşte böyle yapıldı. Daha sonra, \(...\)başlangıçta sadece s edkomut gibi s/foo\(.\)/\1bar/ve daha sonra gibi şeyler yapmak için eklendi grep '\(.\)\1'(ancak eşik gibi değil \(xx\)*).
UnixV7'de (1979, neredeyse on yıl sonra), yeni egrepve awkyardımcı programlara genişletilmiş düzenli ifade adı verilen yeni bir düzenli ifade biçimi eklendi (yeni araçlar oldukları için, kırılacak geriye dönük uyumluluk yoktur). Sonunda, bu Ken Thompson'un antik mevcut işlevselliği ile sağlanan qed(münavebe operatörü |gruplama, (..)*) ve benzeri birkaç operatörleri eklendi +ve ?(ama temel düzenli ifadeler backref özelliği yoktu).
Daha sonra BSD'ler eklendi \<ve \>(hem BRE hem de ERE'ye ) ve SysV eklendi \{ve \}sadece BRE'lere.
Böyle bir geriye dönük uyumluluk kırılarak ERE'ye kadar geç değildir {ve }ERE'ye eklenmiştir. Herkes eklemedi. Örneğin, awk4.0.0 (2011) sürümüne kadar GNU {, POSIX uyumluluk moduna zorlanmadığı sürece desteklemedi .
GNU grep90'lı yılların başında yazıldığında, hem BSD hem de SysV'den (örneğin \<, {) tüm güzellikleri ekledi ve BRE ve ERE için iki ayrı regexp sözdizimi ve motora sahip olmak yerine, aynı operatörleri sadece BRE meslektaşlarına uyguladı. (, ?, {, +bir eğik çizgi ile öncesinde gerekir (başka bir BRE uygulamaları ile uyumlu olması gerekir). Bu yapabileceğin yüzden .\+GNU içinde grep(yani POSIX değil ya da diğer uygulamaları tarafından desteklenen rağmen) ve yapabileceğiniz (.)\1GNU içinde egrep(yani POSIX değil veya GNU gibi diğer birçok uygulamaları tarafından desteklenen gerçi awk).
Ekleme \xoperatörleri geriye doğru uyumlu bir şekilde daha operatörleri eklemek için tek yol değildir. Örneğin, perlkullanılmış (?...). Bu, ERE'lerde (?=...)geçerli olmadığı için ERE'lerle geriye dönük olarak uyumludur .*?. vimbenzer operatörler için bunu tanıtarak \@=veya .\{-}örneğin farklı şekilde yaptılar.