Elementy sortowania są zwykle przywoływane w kontekście sortowania.
W wielu językach sortowanie (sortowanie jak w słowniku) odbywa się nie tylko według znaków. Na przykład w języku czeskim ch
nie sortuje się między nimi cg
i ci
tak jak w języku angielskim, ale uważa się za całość do sortowania. Jest to element zestawiający (nie możemy tutaj odnosić się do znaku, znak jest podzbiorem elementów zestawiających), który sortuje pomiędzy h
i i
.
Teraz możesz zapytać: co to ma wspólnego z wyrażeniami regularnymi? , Dlaczego miałbym chcieć odwoływać się do elementu zestawiającego w wyrażeniu nawiasowym? .
Cóż, w wyrażeniach w nawiasach używa się kolejności. Na przykład w [c-j]
chcesz, aby znaki były pomiędzy c
i j
. A ty? Wolisz tam zestawiać elementy. [h-i]
w meczach regionalnych w Czechach ch
:
$ echo cho | LC_ALL=cs_CZ.UTF-8 grep '^[h-i]o'
cho
Jeśli więc możesz wymienić zakres elementów zestawiających w wyrażeniu w nawiasie, możesz spodziewać się, że będziesz w stanie również je wymienić osobno. [a-cch]
pasowałby do tych elementów zestawiających między a
i c
a c
oraz i h
. Aby mieć a-c
i ch
element zestawiający, potrzebujemy nowej składni:
$ echo cho | LC_ALL=cs_CZ.UTF-8 grep '^[a-c[.ch.]]o'
cho
(te pośrednie a
i c
oraz ch
jeden).
Teraz świat nie jest jeszcze idealny i prawdopodobnie nigdy nie będzie. Powyższy przykład dotyczył systemu GNU i działał. Innym przykładem elementu zestawiającego może być e
łączenie ostrego akcentu w UTF-8 ( $'e\u0301'
renderowane jak $'\u00e9'
jako é
).
é i é są tym samym znakiem, z tym że jeden jest reprezentowany przez jeden znak, a drugi przez dwa.
$ echo $'e\u301t\ue9' | grep '^[d-f]t'
Będzie działał poprawnie na niektórych systemach, ale nie na innych (na przykład nie na GNU). I nie jest jasne, czy $'[[.\ue9.]]'
powinno pasować tylko $'\ue9'
czy jedno $'\ue9'
i drugie i $'e\u301'
.
Nie wspominając o skryptach niealfabetycznych lub skryptach o różnych regionalnych porządkach sortowania, takich jak ffi ( ffi
w jednym znaku), które stają się trudne do obsługi przy tak prostym interfejsie API.
ch
są to dwie różne postacie; jest on traktowany jako jeden do celów sortowania. Czy na pewno termin „digraf” jest terminem stosowanym?