Gli elementi di fascicolazione sono generalmente indicati nel contesto dell'ordinamento.
In molte lingue, le regole di confronto (ordinamento come in un dizionario) non vengono eseguite solo per carattere. Ad esempio, in ceco, chnon ordina tra cge cicome se fosse in inglese, ma è considerato come un tutto per l'ordinamento. È un elemento di confronto (qui non possiamo fare riferimento a un personaggio, il personaggio è un sottoinsieme di elementi di confronto) che si divide tra he i.
Ora potresti chiedere: cosa c'entra questo con le espressioni regolari? , Perché dovrei voler fare riferimento a un elemento di confronto in un'espressione di parentesi? .
Bene, all'interno delle espressioni tra parentesi, si usa l'ordine. Ad esempio in [c-j], vuoi i caratteri tra ce j. Bene, vero? Preferiresti raccogliere elementi lì. [h-i]in una locale ceca corrisponde ch:
$ echo cho | LC_ALL=cs_CZ.UTF-8 grep '^[h-i]o'
cho
Quindi, se sei in grado di elencare una serie di elementi di fascicolazione in un'espressione di parentesi, ti aspetteresti di essere in grado di elencarli anche singolarmente. [a-cch]corrisponderebbe agli elementi di confronto tra ae ce i caratteri ce h. Per avere a-ce l' chelemento di confronto, abbiamo bisogno di una nuova sintassi:
$ echo cho | LC_ALL=cs_CZ.UTF-8 grep '^[a-c[.ch.]]o'
cho
(quelli tra ae ce chquello).
Ora, il mondo non è ancora perfetto e probabilmente non lo sarà mai. L'esempio sopra era su un sistema GNU e ha funzionato. Un altro esempio di un elemento di confronto potrebbe essere econ un accento acuto combinato in UTF-8 ( $'e\u0301'reso simile $'\u00e9'a é).
é ed é hanno lo stesso personaggio, tranne per il fatto che uno è rappresentato con un personaggio e l'altro con due.
$ echo $'e\u301t\ue9' | grep '^[d-f]t'
Funzionerà correttamente su alcuni sistemi ma non su altri (non quelli GNU per esempio). E non è chiaro se $'[[.\ue9.]]'debba corrispondere solo $'\ue9'o entrambi $'\ue9'e $'e\u301'.
Per non parlare degli script non alfabetici, o degli script con differenti, regionali, ordinamenti, cose come ffi ( ffiin un carattere) che diventano difficili da gestire con un'API così semplice.
chè in realtà due diversi personaggi; è solo trattato come uno ai fini dell'ordinamento. Sei sicuro che "digraph" è un termine applicabile?