2012-03-29 13 views

Respuesta

6

La descripción del sitio es bastante bueno:

\ X coincide con un solo grafema Unicode, ya sea codificada como un único punto de código o múltiples puntos de código utilizando marcas de combinación. Un grafema se asemeja más al concepto cotidiano de un "personaje". \ X coincide con un codificado como U + 0061 U + 0300, a codificado como U + 00e0, ©, etc.

lo tanto, lo que hace que sea compatibles con Unicode es que puede coincidir con varios puntos de código cuando esos se combinan en una sola "cosa" visible (grafema).

Consulte Wikipedia's page on Combining Characters para obtener más información, por ejemplo, enumera el punto de código U + 0300 mencionado anteriormente.

2

De Perl regex manual:

Esto coincide con una Unicode extendió cúmulo grafema.

\X partidos bastante bien lo que (no Unicode-programador) el uso normal considerarían un carácter único . Como ejemplo, considere una G con algún tipo de marca diacrítica , como una flecha. No existe dicho carácter único en Unicode, pero uno se puede componer utilizando una G seguida de Unicode "COMBINANDO FLECHA ARRIBA A CONTINUACIÓN", y se mostraría mediante software Unicode-aware como si fuera un solo carácter.

Mnemónico: eXtended carácter Unicode.

Y desde PCRE man pages (2012):

PCRE implementa una versión más simple de \ X que Perl, que cambió para hacer partido \ X Unicode lo llama un "grupo de grafema extendida". Esto es más complicado que una secuencia Unicode extendida, que es con lo que coincide PCRE.

[...]

\ X una secuencia Unicode extendida

[...]

El escape \ X coincide con cualquier número de caracteres Unicode que forman un prolongado Secuencia Unicode\ X es equivalente a

(?>\PM\pM*) 

Es decir, que coincide con un carácter sin la propiedad "marca", seguido de cero o más caracteres con la propiedad "marca", y trata la secuencia como un grupo atómico (vea abajo). Los caracteres con la propiedad "marca" son típicamente acentos que afectan al carácter anterior . Ninguno de ellos tiene puntos de código inferiores a 256, por lo que en modo no UTF-8 de 8 bits \ X coincide con cualquier carácter.

Tenga en cuenta que las versiones recientes de Perl han cambiado \ X para que coincida con lo que Unicode llama un "clúster de grafemas extendido", que tiene una definición complicada más .

versión posterior de PCRE man pages (2015):

racimos de grafema extendidas

El \X de escape coincide con cualquier número de caracteres Unicode que forman un "grupo de grafema extendida", y trata la secuencia como un grupo atómico (ver a continuación). Hasta e incluyendo la liberación 8,31, PCRE igualó un lier oído-, más simple definición que era equivalente a

(?>\PM\pM*) 

Es decir, que coincidía con un personaje sin la propiedad "marca", seguida de cero o más caracteres con la propiedad "marca". Los caracteres con la propiedad "marca" son típicamente acentos que no espacian que afectan al carácter anterior.

Esta simple definición se amplió en Unicode para incluir más tipos CATed complicaciones de carácter compuesto, dando a cada personaje una propiedad de ruptura grafema , y la creación de reglas que utilizan estos propiedades para definir los límites de grafema extendidas racimos. En versiones de PCRE posteriores a 8.31, \X coincide con uno de estos clústeres.

\X siempre coincide con al menos un caracter. A continuación, se decide si para añadir caracteres adicionales de acuerdo con las siguientes reglas para que terminan un clúster:

  1. extremo en el extremo de la cadena objetivo.

  2. No termine entre CR y LF; de lo contrario, finalice después de cualquier caracter de control.

  3. No rompa las secuencias de las sílabas de Hangul (una secuencia de comandos coreana). Los caracteres Hangul son de cinco tipos: L, V, T, LV y LVT. Un carácter L puede ir seguido de un carácter L, V, LV o LVT; un carácter V o V puede ir seguido de un carácter V o T; un carácter LVT o T solo puede ser seguido por un carácter T.

  4. No termine antes de extender los caracteres o espaciar las marcas. Los caracteres con la propiedad "marcar" siempre tienen la propiedad de extender grafema "extender" .

  5. No termine después de anteponer caracteres.

  6. En caso contrario, finalice el clúster.

Cuestiones relacionadas