Les éléments de classement sont généralement référencés dans le contexte du tri.
Dans de nombreuses langues, le classement (tri comme dans un dictionnaire) ne se fait pas uniquement par caractère. Par exemple, en tchèque, ch
ne trie pas entre cg
et ci
comme il le ferait en anglais, mais est considéré comme un tout pour le tri. C'est un élément de classement (nous ne pouvons pas faire référence à un caractère ici, le caractère est un sous-ensemble d'éléments de classement) qui trie entre h
et i
.
Vous pouvez maintenant vous demander: qu'est - ce que cela a à voir avec les expressions régulières? , Pourquoi voudrais-je faire référence à un élément d'assemblage dans une expression entre crochets? .
Eh bien, à l'intérieur des expressions entre crochets, on utilise l'ordre. Par exemple dans [c-j]
, vous voulez les caractères entre c
et j
. Eh bien, vous? Vous préférez y rassembler des éléments. [h-i]
dans une locale tchèque correspond ch
:
$ echo cho | LC_ALL=cs_CZ.UTF-8 grep '^[h-i]o'
cho
Donc, si vous êtes en mesure de répertorier une plage d'éléments d'assemblage dans une expression entre crochets, vous vous attendez à pouvoir également les répertorier individuellement. [a-cch]
correspondrait à ces éléments de classement entre a
et c
et les caractères c
et h
. Pour avoir a-c
et l' ch
élément d'assemblage, nous avons besoin d'une nouvelle syntaxe:
$ echo cho | LC_ALL=cs_CZ.UTF-8 grep '^[a-c[.ch.]]o'
cho
(ceux entre a
et c
et ch
celui).
Maintenant, le monde n'est pas encore parfait et ne le sera probablement jamais. L'exemple ci-dessus était sur un système GNU et fonctionnait. Un autre exemple d'un élément d' assemblage peut être e
une combinaison accent aigu en UTF-8 ( $'e\u0301'
rendu comme $'\u00e9'
aussi é
).
é et é sont le même caractère sauf que l'un est représenté avec un caractère et l'autre avec deux.
$ echo $'e\u301t\ue9' | grep '^[d-f]t'
Fonctionnera correctement sur certains systèmes mais pas sur d'autres (pas GNU par exemple). Et on ne sait pas si $'[[.\ue9.]]'
doit correspondre uniquement $'\ue9'
ou les deux $'\ue9'
et $'e\u301'
.
Sans parler des scripts non alphabétiques, ou des scripts avec des ordres de tri différents et régionaux, des choses comme ffi ( ffi
en un seul caractère) qui deviennent difficiles à gérer avec une API aussi simple.
ch
soit en fait deux personnages différents; il est simplement traité comme un à des fins de tri. Êtes-vous sûr que "digraph" est un terme applicable?