Los elementos de intercalación generalmente se mencionan en el contexto de la ordenación.
En muchos idiomas, la clasificación (clasificación como en un diccionario) no solo se realiza por carácter. Por ejemplo, en checo, ch
no clasifica entre cg
y ci
como lo haría en inglés, pero se considera como un todo para la clasificación. Es un elemento de clasificación (no podemos referirnos a un carácter aquí, los caracteres son un subconjunto de elementos de clasificación) que se clasifica entre h
y i
.
Ahora puede preguntar: ¿Qué tiene eso que ver con las expresiones regulares? , ¿Por qué querría referirme a un elemento de clasificación en una expresión de paréntesis? .
Bueno, dentro de las expresiones entre corchetes, uno usa el orden. Por ejemplo [c-j]
, en , desea los caracteres entre c
y j
. Bueno Prefieres clasificar elementos allí. [h-i]
en partidos locales checos ch
:
$ echo cho | LC_ALL=cs_CZ.UTF-8 grep '^[h-i]o'
cho
Entonces, si puede enumerar un rango de elementos de clasificación en una expresión de paréntesis, entonces esperaría poder enumerarlos individualmente también. [a-cch]
coincidiría con los elementos de clasificación entre a
y c
y los caracteres c
y h
. Para tener a-c
y el ch
elemento de clasificación, necesitamos una nueva sintaxis:
$ echo cho | LC_ALL=cs_CZ.UTF-8 grep '^[a-c[.ch.]]o'
cho
(los de entre a
y c
y el ch
uno).
Ahora, el mundo aún no es perfecto y probablemente nunca lo será. El ejemplo anterior estaba en un sistema GNU y funcionó. Otro ejemplo de un elemento de clasificación podría ser e
con un acento agudo combinado en UTF-8 ( $'e\u0301'
representado $'\u00e9'
como é
).
é y é son el mismo carácter, excepto que uno está representado con un carácter y el otro con dos.
$ echo $'e\u301t\ue9' | grep '^[d-f]t'
Funcionará correctamente en algunos sistemas pero no en otros (no en GNU, por ejemplo). Y no está claro si $'[[.\ue9.]]'
debería coincidir solo $'\ue9'
o ambos $'\ue9'
y $'e\u301'
.
Sin mencionar las secuencias de comandos no alfabéticas, o las secuencias de comandos con diferentes órdenes de clasificación regionales, cosas como ffi ( ffi
en un carácter) que se vuelven difíciles de manejar con una API tan simple.
ch
es en realidad dos caracteres diferentes; solo se trata como uno para fines de clasificación. ¿Estás seguro de que "digraph" es un término aplicable?