Elemen kolasi biasanya dirujuk dalam konteks penyortiran.
Dalam banyak bahasa, collation (pengurutan seperti dalam kamus) tidak hanya dilakukan per karakter. Misalnya, di Ceko, ch
tidak memilah antara cg
dan ci
seperti itu dalam bahasa Inggris, tetapi dianggap sebagai keseluruhan untuk menyortir. Ini adalah elemen penyusun (kita tidak bisa merujuk ke karakter di sini, karakter adalah bagian dari elemen penyusun) yang menyortir di antara h
dan i
.
Sekarang Anda mungkin bertanya, Apa hubungannya dengan ekspresi reguler? , Mengapa saya ingin merujuk ke elemen penyusun dalam ekspresi braket? .
Nah, di dalam ekspresi braket, orang menggunakan urutan. Misalnya di [c-j]
, Anda ingin karakter di antara c
dan j
. Baiklah, kan? Anda lebih suka menyusun elemen di sana. [h-i]
dalam pertandingan lokal Republik ch
:
$ echo cho | LC_ALL=cs_CZ.UTF-8 grep '^[h-i]o'
cho
Jadi, jika Anda dapat membuat daftar berbagai elemen penyusun dalam ekspresi braket, maka Anda berharap dapat membuat daftar mereka secara individual juga. [a-cch]
akan cocok dengan elemen penyusun di antara a
dan c
dan c
dan h
karakter. Untuk memiliki a-c
dan ch
menyusun elemen, kita memerlukan sintaks baru:
$ echo cho | LC_ALL=cs_CZ.UTF-8 grep '^[a-c[.ch.]]o'
cho
(Yang di antara a
dan c
dan yang ch
).
Sekarang, dunia belum sempurna dan mungkin tidak akan pernah. Contoh di atas adalah pada sistem GNU dan berfungsi. Contoh lain dari elemen collating bisa e
dengan menggabungkan aksen akut di UTF-8 ( $'e\u0301'
diterjemahkan seperti $'\u00e9'
as é
).
é dan é adalah karakter yang sama kecuali satu diwakili dengan satu karakter dan yang lainnya dengan dua.
$ echo $'e\u301t\ue9' | grep '^[d-f]t'
Akan bekerja dengan baik pada beberapa sistem tetapi tidak pada yang lain (bukan yang GNU misalnya). Dan tidak jelas apakah $'[[.\ue9.]]'
hanya cocok $'\ue9'
atau keduanya $'\ue9'
dan $'e\u301'
.
Belum lagi skrip non-alfabet, atau skrip dengan urutan yang berbeda, regional, pengurutan, hal-hal seperti ffi ( ffi
dalam satu karakter) yang menjadi sulit untuk ditangani dengan API sederhana seperti itu.
ch
adalah dua karakter yang berbeda; itu hanya diperlakukan sebagai satu untuk keperluan penyortiran. Apakah Anda yakin "digraf" adalah istilah yang berlaku?