На элементы сортировки обычно ссылаются в контексте сортировки.
Во многих языках сопоставление (сортировка как в словаре) выполняется не только по символам. Например, на чешском языке, ch
не сортирует cg
и не так, ci
как это было бы на английском языке, но считается в целом для сортировки. Это элемент сортировки (здесь мы не можем ссылаться на символ, символ - это подмножество элементов сортировки), который сортирует между h
и i
.
Теперь вы можете спросить: какое отношение это имеет к регулярным выражениям? , Почему я хотел бы сослаться на упорядочивающий элемент в выражении скобки? ,
Что ж, внутри скобочных выражений используется порядок. Например, в [c-j]
, вы хотите символы между c
и j
. Ну а ты? Вы бы предпочли собирать элементы там. [h-i]
в чешской локали совпадает ch
:
$ echo cho | LC_ALL=cs_CZ.UTF-8 grep '^[h-i]o'
cho
Таким образом, если вы можете перечислить диапазон элементов сортировки в выражении в скобках, то вы можете ожидать, что сможете перечислить их по отдельности. [a-cch]
будет сопоставлять элементы сортировки между a
и c
и c
и h
символов. Чтобы иметь a-c
и ch
элемент сортировки, нам нужен новый синтаксис:
$ echo cho | LC_ALL=cs_CZ.UTF-8 grep '^[a-c[.ch.]]o'
cho
(те , между ними a
и c
и ch
один).
Сейчас мир еще не совершенен и, вероятно, никогда не будет. Пример выше был в системе GNU и работал. Другим примером элемента сопоставления может быть e
комбинированный острый акцент в UTF-8 ( $'e\u0301'
отображается как $'\u00e9'
as é
).
é и é - один и тот же символ, за исключением того, что один представлен одним символом, а другой - двумя.
$ echo $'e\u301t\ue9' | grep '^[d-f]t'
Будет работать должным образом в некоторых системах, но не в других (например, не в GNU). И неясно, $'[[.\ue9.]]'
должны ли совпадать только $'\ue9'
или оба $'\ue9'
и $'e\u301'
.
Не говоря уже о неалфавитных сценариях или сценариях с различными региональными порядками сортировки, такими как ffi ( ffi
одним символом), которые становятся сложными для обработки с таким простым API.
ch
это на самом деле два разных персонажа; это просто рассматривается как один для целей сортировки. Вы уверены, что «диграф» является применимым термином?