На елементи зіставлення зазвичай посилаються в контексті сортування.
У багатьох мовах зіставлення (сортування, як у словнику) проводиться не лише за символом. Так , наприклад, в Чехії, 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'
як é
).
é і é - один і той же символ, за винятком того, що один представлений одним символом, а другий - двома.
$ echo $'e\u301t\ue9' | grep '^[d-f]t'
Працюватиме належним чином у деяких системах, але не в інших (наприклад, у GNU). І незрозуміло, чи $'[[.\ue9.]]'
слід відповідати тільки $'\ue9'
або обом $'\ue9'
і $'e\u301'
.
Не кажучи вже про не алфавітні сценарії чи сценарії з різними, регіональними порядками сортування, такі речі, як ffi
in ( в одному символі), з якими стає складним обробляти такий простий API.
ch
це на самому справі два різних персонажа; це просто трактується як один з метою сортування. Ви впевнені, що "digraph" - це застосовний термін?