Bu tarihsel nedenlerden dolayı.
Regexp ilk olarak ed
70'li yılların başlarında yardımcı programda Unix'te tanıtıldı . Gerçi ed
dayanıyordu qed
gerçekleştirme aşamasında aynı yazarlar tarafından daha karmaşık Regexp'i anlaşılan, ed
sadece 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
ed
olarak komutu s/foo() {/foo (var) {/g
tü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
ed
komut 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 egrep
ve awk
yardı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, awk
4.0.0 (2011) sürümüne kadar GNU {
, POSIX uyumluluk moduna zorlanmadığı sürece desteklemedi .
GNU grep
90'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 (.)\1
GNU içinde egrep
(yani POSIX değil veya GNU gibi diğer birçok uygulamaları tarafından desteklenen gerçi awk
).
Ekleme \x
operatörleri geriye doğru uyumlu bir şekilde daha operatörleri eklemek için tek yol değildir. Örneğin, perl
kullanılmış (?...)
. Bu, ERE'lerde (?=...)
geçerli olmadığı için ERE'lerle geriye dönük olarak uyumludur .*?
. vim
benzer operatörler için bunu tanıtarak \@=
veya .\{-}
örneğin farklı şekilde yaptılar.