Harmanlama öğelerine genellikle sıralama bağlamında başvurulur.
Birçok dilde, harmanlama (sözlükte olduğu gibi sıralama) yalnızca karakter başına yapılmaz. Örneğin, Çekçe, ch
arasında değil sıralama yapar cg
ve ci
İngilizce olarak olur, ama sıralamak için bir bütün olarak kabul edilir gibi. O (biz burada bir karakterinden söz edemez, karakter harmanlama unsurların bir alt kümesidir) arasındaki o sıralar bir harmanlama elementtir h
ve i
.
Şimdi şunu sorabilirsiniz: Bunun düzenli ifadelerle ne ilgisi var? , Neden parantez ifadesindeki bir harmanlama öğesine başvurmak isteyeyim? .
Parantez ifadelerinin içinde, düzen kullanılır. Örneğin [c-j]
, içinde ve arasındaki karakterleri istiyorsunuz . Peki, öyle mi? Orada öğeleri harmanlamayı tercih edersiniz. Çek yerel ayarlarında :c
j
[h-i]
ch
$ echo cho | LC_ALL=cs_CZ.UTF-8 grep '^[h-i]o'
cho
Bu nedenle, köşeli parantez içindeki bir dizi harmanlama öğesini listeleyebiliyorsanız, bunları tek tek de listeleyebilmeyi beklersiniz. ve ve ile karakterleri [a-cch]
arasındaki harmanlayan öğelerle eşleşir . Sahip olmak ve harmanlama öğesine sahip olmak için yeni bir sözdizimine ihtiyacımız var:a
c
c
h
a-c
ch
$ echo cho | LC_ALL=cs_CZ.UTF-8 grep '^[a-c[.ch.]]o'
cho
(arasında olanlar a
ve c
ve ch
bir tane).
Şimdi, dünya henüz mükemmel değil ve muhtemelen asla olmayacak. Yukarıdaki örnek bir GNU sisteminde idi ve işe yaradı. Bir harmanlama elemanının başka bir örneği, e
UTF-8'de ( olduğu $'e\u0301'
gibi işlenir ) birleştirilen akut bir vurgu ile olabilir .$'\u00e9'
é
é ve é aynı karakterdir, ancak biri bir karakterle, diğeri iki ile temsil edilir.
$ echo $'e\u301t\ue9' | grep '^[d-f]t'
Bazı sistemlerde düzgün çalışır ancak diğerleri üzerinde çalışmaz (örneğin GNU'larda değil). Ve bu gitmediği belirsiz $'[[.\ue9.]]'
sadece aynı olmalıdır $'\ue9'
ya da her ikisi $'\ue9'
ve $'e\u301'
.
Alfabetik olmayan komut dosyalarından veya farklı, bölgesel, sıralama düzenlerine sahip komut dosyalarından bahsetmiyorum ffi
, such ( bir karakterde) gibi basit bir API ile işlem yapmak zorlaşır.
ch
olduğunu aslında iki farklı karakter; sadece sıralama amaçlı olarak değerlendirilir. "Digraph" ın geçerli bir terim olduğundan emin misiniz?