Propriétés des caractères Unicode

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ée 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 Inclut des émojis
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 :

  • \p{Greek}

  • \P{Han}

Ceux qui ne font pas partie 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 individuels nécessaires pour 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 Sous-masques uniques). Les caractères avec la propriété "mark" sont typiquement les lettres accentuées qui affectent le caractère qui les 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.

Found A Problem?

Learn How To Improve This Page • Submit a Pull Request • Report a Bug
+add a note

User Contributed Notes 7 notes

up
23
huhwatnouDONTspamPLEASE at hotmail dot com
10 years ago
To select UTF-8 mode for the additional escape sequences (\p{xx}, \P{xx}, and \X) , use the "u" modifier (see http://php.net/manual/en/reference.pcre.pattern.modifiers.php).
I wondered why a German sharp S (ß) was marked as a control character by \p{Cc} and it took me a while to properly read the first sentence: "Since 5.1.0, three additional escape sequences to match generic character types are available when UTF-8 mode is selected. " :-$ and then to find out how to do so.
up
13
mercury at caucasus dot net
16 years ago
An excellent article explaining all these properties can be found here: http://www.regular-expressions.info/unicode.html 
up
6
Steve
3 years ago
Examples are always useful! See https://unicodeplus.com/category for more.
C Other 
Cc Control (Unicode code points in the ranges U+0000-U+001F and U+007F-U+009F)
Cf Format (Soft hyphen (U+00AD), zero width space (U+200B), etc.)
Cn Unassigned (Any code point that is not in the Unicode table)
Co Private use 
Cs Surrogate (Characters in the range U+D800 to U+DFFF, which are invalid in utf-8)
L Letter
Ll Lower case letter (a-z, μßàáâãäåæçèéêëìíîïðñòóôõöøùúûüýþÿ and more)
Lm Modifier letter (Letter-like characters that are usually combined with others, but here they stand alone:
 hɦjrɹɻʁwyʹʺʻʼʽʾʿˀˁˆˇˈˉˊˋˌˍˎˏːˑɣlsxʕˬˮʹ ͅՙ and more)
Lo Other letter (aoƻǀǁǂǃʔ and many more ideographs and letters from unicase alphabets)
Lt Title case letter (DžLjNjDzᾈᾉᾊᾋᾌᾍᾎᾏᾘᾙᾚᾛᾜᾝᾞᾟᾨᾩᾪᾫᾬᾭᾮᾯᾼῌῼ)
Lu Upper case letter (A-Z, ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞ and more)
L& Ordinary letter (Any character that has the Lu, Ll, or Lt property)
M Mark
Mc Spacing mark (None in latin scripts)
Me Enclosing mark (Combining enclosing square (U+20DE) like in a⃞ , combining enclosing circle backslash (U+20E0) like in a⃠)
Mn Non-spacing mark (Combining diacritical marks U+0300-U+036f, like the accents on this letter a: áâãāa̅ăȧäảåa̋ǎa̍a̎ȁa̐ȃ)
N Number 
Nd Decimal number (0123456789, ٠١٢٣٤٥٦٧٨٩ and digits in many other scripts.)
Nl Letter number (IIIIIIIVVVIVIIVIIIIXXXIXIILCDMiiiiiiivvviviiviiiixxxixiilcdm and some more)
No Other number (0123456789 0123456789 1⁄21⁄32⁄31⁄43⁄41⁄52⁄53⁄54⁄51⁄65⁄61⁄71⁄83⁄85⁄87⁄81⁄91⁄10 1234567891011121314151617181920, etc.)
P Punctuation 
Pc Connector punctuation (_ underscore (U+005F), ‿ undertie U+203F, ⁀ character tie (U+2040), etc.)
Pd Dash punctuation (- hyphen-minus (U+002D), ‐ hyphen (U+2010), ‐ non-breaking hyphen (U+2011), ‒ figure dash (U+2012),
 – en dash (U+2013), — em dash (U+2014), ― horizontal bar (U+2015), etc.)
Pe Close punctuation (right parenthesis, bracket, or brace: `)` (U+0029), `]` (U+005D), `}` (U+007D), etc.) 
Pf Final punctuation (right quotation marks: » (U+00BB), ’ (U+2019), " (U+201D), etc.)
Pi Initial punctuation (left quotation marks: « (U+00AB), ‘ (U+2018), " (U+201C), etc.)
Po Other punctuation (!"#%&'*,./:;?@\¡§¶·¿)
Ps Open punctuation (left parenthesis, bracket, or brace: `(` (U+0028), `[` (U+005B), `{` (U+007B), etc.) 
S Symbol 
Sc Currency symbol ($¢£¤,円 ₠ ₡ ₢ ₣ ₤ ₥ ₦ ₧ Rs ₩ ₪ ₫ € ₭ ₮ ₯ ₰ ₱ ₲ ₳ ₴ ₵ ₶ ₷ ₸ ₹ ₺ ₻ ₼ ₽ ₾ ₿ (U+20A0-U+20BF), etc.)
Sk Modifier symbol (Symbol-like characters that are usually combined with others, but here they stand alone:
 ^` ̈ ̄ ́ ̧ and more)
Sm Mathematical symbol (+<=&g×ばつ÷϶ and many more)
So Other symbol (¦ broken bar (U+00A6), © copyright sign (U+00A9), ® registered sign (U+00AE), ° degree sign (U+00B0);
 arrows, signs, emojis and many many more)
Z Separator 
Zl Line separator (line separator (U+2028))
Zp Paragraph separator (paragraph separator (U+2029))
Zs Space separator (space, no-break space, en quad, em quad, en space, em space, figure space, thin space, hair space, etc.)
up
10
xuantoaiph at gmail dot com
12 years ago
My country, Vietnam, have our own alphabet table:
http://en.wikipedia.org/wiki/Vietnamese_alphabet
I hope PHP will support better than in Vietnamese.
up
5
o_shes01 at uni-muenster dot de
15 years ago
For those who wonder: 'letter_titlecase' applies to digraphs/trigraphs, where capitalization involves only the first letter. 
For example, there are three codepoints for the "LJ" digraph in Unicode: 
 (*) uppercase "LJ": U+01C7 
 (*) titlecase "Lj": U+01C8 
 (*) lowercase "lj": U+01C9
up
3
php at lnx-bsp dot net
9 years ago
Not made clear in the top of page explanation, but these escaped character classes can be included within square brackets to make a broader character class. For example:
<?php preg_match( '/[\p{N}\p{L}]+/', $data ) ?>

Will match any combination of letters and numbers.
up
3
suit at rebell dot at
16 years ago
these properties are usualy only available if PCRE is compiled with "--enable-unicode-properties"
if you want to match any word but want to provide a fallback, you can do something like that: 
<?php
if(@preg_match_all('/\p{L}+/u', $str, $arr) {
 // fallback goes here
 // for example just '/\w+/u' for a less acurate match
}
?>
+add a note

AltStyle によって変換されたページ (->オリジナル) /