Sortierelemente werden normalerweise im Zusammenhang mit der Sortierung referenziert.
In vielen Sprachen erfolgt die Sortierung (Sortieren wie in einem Wörterbuch) nicht nur pro Zeichen. Zum Beispiel wird auf Tschechisch ch
nicht zwischen cg
und ci
wie auf Englisch sortiert, sondern als Ganzes zum Sortieren betrachtet. Es ist ein Sortierelement (wir können uns hier nicht auf ein Zeichen beziehen, Zeichen sind eine Teilmenge von Sortierelementen), das zwischen h
und sortiert i
.
Nun fragen Sie sich vielleicht: Was hat das mit regulären Ausdrücken zu tun? , Warum sollte ich in einem Klammerausdruck auf ein Sortierelement verweisen wollen? .
Nun, innerhalb von Klammerausdrücken verwendet man die Reihenfolge. Zum Beispiel in [c-j]
möchten Sie die Zeichen zwischen c
und j
. Na ja, oder? Sie möchten dort lieber Elemente zusammenstellen. [h-i]
in einem tschechischen Gebietsschema entspricht ch
:
$ echo cho | LC_ALL=cs_CZ.UTF-8 grep '^[h-i]o'
cho
Wenn Sie also in der Lage sind, eine Reihe von Sortierelementen in einem Klammerausdruck aufzulisten, können Sie davon ausgehen, dass Sie sie auch einzeln auflisten können. [a-cch]
würde das Sortieren von Elementen zwischen a
und c
und den c
und h
Zeichen übereinstimmen . Um a-c
und das ch
Sortierelement zu haben , benötigen wir eine neue Syntax:
$ echo cho | LC_ALL=cs_CZ.UTF-8 grep '^[a-c[.ch.]]o'
cho
(die dazwischen a
und c
und die ch
eine).
Jetzt ist die Welt noch nicht perfekt und wird es wahrscheinlich nie. Das obige Beispiel war auf einem GNU-System und funktionierte. Ein anderes Beispiel eines Zusammentragelement sein könnte , e
mit einer Kombination von Akut in UTF-8 ( $'e\u0301'
gerendert wie $'\u00e9'
als é
).
é und é sind dasselbe Zeichen, außer dass eines mit einem Zeichen und das andere mit zwei Zeichen dargestellt wird.
$ echo $'e\u301t\ue9' | grep '^[d-f]t'
Funktioniert auf einigen Systemen ordnungsgemäß, auf anderen jedoch nicht (z. B. nicht auf GNU-Systemen). Und es ist unklar, ob $'[[.\ue9.]]'
nur $'\ue9'
oder beides übereinstimmen soll $'\ue9'
und $'e\u301'
.
Ganz zu schweigen von nicht-alphabetischen Skripten oder Skripten mit unterschiedlichen regionalen Sortierreihenfolgen, z. B. ffi ( ffi
in einem Zeichen), die mit einer so einfachen API schwierig zu handhaben sind.
ch
ist eigentlich zwei verschiedene Charaktere; Es wird nur zum Sortieren als eins behandelt. Sind Sie sicher, dass "Digraph" ein zutreffender Begriff ist?