Fonctionnement des expressions rationnelles
PHP Manual

Propriétés des caractères Unicode

Depuis PHP 5.1.0, trois nouvelles séquences d'échappement pour trouver des types de caractères sont disponibles lorsque le mode UTF-8 est sélectionné. Elles sont :

\p{xx}
un caractère avec les propriétés xx
\P{xx}
un caractère sans les propriétés xx
\X
une séquence étendue Unicode

Les noms des propriétés représentés par xx ci-dessus sont limités aux catégories de propriétés générales Unicode. Chaque caractère a exactement une seule de ces propriétés, spécifié par une abréviation sur deux caractères. Pour des raisons de compatibilité avec Perl, la négation peut être spécifiée en incluant un accent circonflexe entre l'accolade ouvrante et le nom de la propriété. Par exemple, \p{^Lu} équivaut à la même chose que \P{Lu}.

Si une seule lettre est spécifiée avec \p ou \P, il inclut toutes les propriétés qui commencent par cette lettre. Dans ce cas, en l'absence de négation, les accolades dans la séquence d'échappement sont optionnelles ; ceci revient à la même chose :

\p{L}
\pL
Codes des propriétés supportées
Propriétés Correspondance Notes
C Autre  
Cc Contrôle  
Cf Format  
Cn Non affecté  
Co Utilisation privée  
Cs Substitut  
L Lettre Inclut les propriétés suivantes : Ll, Lm, Lo, Lt et Lu.
Ll Lettre en minuscule  
Lm Lettre de modification  
Lo Autres lettres  
Lt Lettre titrée  
Lu Lettre en majuscule  
M Marque  
Mc Marque d'espacement  
Me Marque d'enfermement  
Mn Marque non espacée  
N Nombre  
Nd Nombre décimal  
Nl Nombre Lettre  
No Autres nombres  
P Ponctuation  
Pc Ponctuation de connecteur  
Pd Tiret de ponctuation  
Pe Ponctuation de fermeture  
Pf Ponctuation finale  
Pi Ponctuation initiale  
Po Autres ponctuations  
Ps Ponctuation ouvrante  
S Symbole  
Sc Symbole monétaire  
Sk Symbole de modification  
Sm Symbole mathématique  
So Autres symboles  
Z Séparateur  
Zl Séparateur de ligne  
Zp Séparateur de paragraphe  
Zs Séparateur d'espace  

Les propriétés étendues comme InMusicalSymbols ne sont pas supportées par PCRE.

La sensibilité à la casse de la recherche n'affecte pas les séquences d'échappement. Par exemple, \p{Lu} cherche toujours et uniquement les lettres en majuscules

Les jeux de caractères unicodes sont définis comme appartenant à certains scripts. Un caractère d'un de ces jeux peut être trouvé en utilisant un nom de script. Par exemple :

Ceux qui ne font pas partis d'un script identifié sont regroupés dans Common. Voici la liste courante des scripts :

Scripts supportés
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        

La séquence \X cherche n'importe quel groupe de graphème Unicode étendu. Un groupe de graphème est une chaîne composée d'un ou plusieurs caractères Unicode qui se combinent pour former un seul glyphe. Dans les faits, cela revient à utiliser le caractère . sachant qu'il va matcher un caractère composé, peu importe le nombre de caractères individuel nécessaire à l'afficher.

Dans les versions PCRE inférieures à 8.32 (ce qui correspond aux versions de PHP antérieures à la version 5.4.14 lorsque la bibliothèque interne est utilisée), \X était équivalent à (?>\PM\pM*). Aussi, il matchait un caractère sans propriété "mark", suivi par aucun ou plusieurs caractères possédant la propriété "mark", et traitait la séquence comme un groupe atomique (voir ci-dessous). Les caractères avec la propriété "mark" sont typiquement les lettres accentuées qui affectent le caractère qui la précède.

La recherche de caractères par les propriétés Unicode n'est pas la méthode la plus rapide, car PCRE doit chercher une structure qui contient les données dans plus de quinze mille caractères. C'est pour cela que les séquences traditionnelles comme \d et \w n'utilisent pas les propriétés Unicode dans PCRE.


Fonctionnement des expressions rationnelles
PHP Manual