Propiedades de los caracteres Unicode

A partir de 5.1.0, están disponibles tres secuencias de escape adicionales para comparar tipos de caracteres genéricos cuando el modo UTF-8 está seleccionado. Son:

\p{xx}
un carácter con la propiedad xx
\P{xx}
un carácter sin la propiedad xx
\X
una secuencia Unicode extendida

Los nombres de las propiedades representadas arriba por xx están limitadas a las propiedades de la categoría general de Unicode. Cada carácter tiene exactamente una propiedad, especificada por una abreviatura de dos letras. Por compatibilidad con Perl, la negación se puede especificar incluyendo un acento circunflejo entre la llave de apertura y el nombre de la propiedad. Por ejemplo, \p{^Lu} es lo mismo que \P{Lu}.

Si sólo se especifica una letra con \p o \P, se incluyen todas las propiedades que comienzan con esa letra. En este caso, en la ausencia de negación, las llaves en la secuencia de escape son opcionales; estos dos ejemplos tienen el mismo efecto:

\p{L}
\pL
Códigos de propiedades admitidos
Propiedad Coincidencias Notas
C Otro  
Cc Control  
Cf Formato  
Cn Sin asignar  
Co Uso privado  
Cs Sustituto  
L Letra Incluye las siguientes propiedades: Ll, Lm, Lo, Lt y Lu.
Ll Letra minúscula  
Lm Letra modificadora  
Lo Otra letra  
Lt Letra de título  
Lu Letra mayúscula  
M Marca  
Mc Marca de espacio  
Me Marca de cierre  
Mn Marca de no-espacio  
N Número  
Nd Número decimal  
Nl Número letra  
No Otro número  
P Puntuación  
Pc Puntuación de conexión  
Pd Puntuación guión  
Pe Puntuación de cierre  
Pf Puntuación final  
Pi Puntuación inicial  
Po Otra puntuación  
Ps Puntuación de apertura  
S Símbolo  
Sc Símbolo de moneda  
Sk Símbolo modificador  
Sm Símbolo matemático  
So Otro símbolo  
Z Separador  
Zl Separador de línea  
Zp Separador de párrafo  
Zs Separador de espacio  

Las propiedades extendidas tales como InMusicalSymbols no están admitidas por PCRE.

El especificar coincidicencias insensibles a mayúsculas-minúsculas no afecta a estas secuencias de escape. Por ejemplo, \p{Lu} siempre coincide con letras mayúsculas.

Los conjuntos de caracteres Unicode están definidos como pertenecientes a ciertos alfabetos. Se puede hacer coincidir un carácter de uno de estos conjuntos usando un nombre de alfabeto. Por ejemplo:

  • \p{Greek}
  • \P{Han}

Aquellos que no son parte de un alfabeto identificado, son metidos en el mismo saco como Common. La lista actual de alfabetos es:

Supported scripts
Arabic Armenian Avestan Balinese Bamum
Batak Bengali Bopomofo Brahmi Braille
Buginese Buhid Canadian_Aboriginal Carian Chakma
Cham Cherokee Common Coptic Cuneiform
Cypriot Cyrillic Deseret Devanagari Egyptian_Hieroglyphs
Ethiopic Georgian Glagolitic Gothic Greek
Gujarati Gurmukhi Han Hangul Hanunoo
Hebrew Hiragana Imperial_Aramaic Inherited Inscriptional_Pahlavi
Inscriptional_Parthian Javanese Kaithi Kannada Katakana
Kayah_Li Kharoshthi Khmer Lao Latin
Lepcha Limbu Linear_B Lisu Lycian
Lydian Malayalam Mandaic Meetei_Mayek Meroitic_Cursive
Meroitic_Hieroglyphs Miao Mongolian Myanmar New_Tai_Lue
Nko Ogham Old_Italic Old_Persian Old_South_Arabian
Old_Turkic Ol_Chiki Oriya Osmanya Phags_Pa
Phoenician Rejang Runic Samaritan Saurashtra
Sharada Shavian Sinhala Sora_Sompeng Sundanese
Syloti_Nagri Syriac Tagalog Tagbanwa Tai_Le
Tai_Tham Tai_Viet Takri Tamil Telugu
Thaana Thai Tibetan Tifinagh Ugaritic
Vai Yi        

El escape \X coincide con un cluster de grafemas ampliado de Unicode. Un clúster de grafemas ampliado es uno o más caracteres Unicode que se combinan para formar un único glifo. A todos los efectos, se puede pensar en ello como el equivalente Unicode de . ya que coincidirá con un carácter compuesto, independientemente de cúantos caracteres individuales se usan en realidad para representarlo.

En versiones de PCRE anteriores a la 8.32 (las cuales se corresponden con versiones de PHP anteriores a la 5.4.14 al usar la biblioteca PCRE incluida), \X es equivalente a (?>\PM\pM*). Esto es, 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 (véase más abajo). Los caracteres con la propiedad "marca" son normalmente acentos que afectan al carácter predecente.

La comparación de caracteres por propiedades Unicode no es rápida, porque PCRE ha de buscar una estructura que contiene datos por más de quince mil caracteres. Es por esto por lo que las secuencias de escape tradicionales tales como \d y \w no usan propiedades Unicode en PCRE.