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 :
un caractère avec les propriétés xx
un caractère sans les propriétés xx
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
| 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 :
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.
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.An excellent article explaining all these properties can be found here: http://www.regular-expressions.info/unicode.html 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.)My country, Vietnam, have our own alphabet table:
http://en.wikipedia.org/wiki/Vietnamese_alphabet
I hope PHP will support better than in Vietnamese.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+01C9Not 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.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
}
?>