PHP 7.1.12 Released

Evrenkodlu Karakterlerin Özellikleri

PHP 4.4.0 ve 5.1.0 sürümlerinde, UTF-8 kipi seçildiğinde soysal karakter türleriyle eşleşen üç düzenli ifade işleci daha devreye girmiştir. Bunlar:

\p{xx}
xx özelliğine sahip bir karakter
\P{xx}
xx özelliği olmayan bir karakter
\X
bir genişletilmiş Evrenkod dizilimi

Yukarıda xx ile belirtilen özellik isimleri Evrenkod genel sınıf özellikleriyle sınırlıdır. Belirtilen her karakter, belli bir özelliğin iki harflik kısaltmasındaki harflerle aynı olmak zorundadır. Perl ile uyumluluk için, olumsuzlama işleci kaşlı ayraç ile özellik kısaltmasının ilk harfi arasına konmalıdır. Örneğin, \p{^Lu} şablonu \P{Lu} ile aynıdır.

Eğer \p veya \P ile tek bir harf belirtilirse bu harfle başlayan tüm özellikleri ifade edecektir. Böyle bir durumda, olumsuzlama işleci kullanılmayacaksa kaşlı ayraçların kullanımı isteğe bağlıdır. Yani, bu iki örnek aynı etkiye sahiptir:

      \p{L}
      \pL
     
Desteklenen özellik kodları
Özellik Eşleşmeler Açıklamalar
CDiğer 
CcDenetim 
CfBiçem 
CnAtanmamış  
CoÖzel kullanım  
Csİkame  
LHarf Şu özellikleri içerir: Ll, Lm, Lo, Lt ve Lu.
LlKüçük harf  
LmDeğiştirici harf  
LoDiğer harf  
LtBaşlık harfi  
LuBüyük harf  
Mİm 
McBoşluk imi  
MeKapsama imi  
MnBoşluk bırakmama imi 
NSayı 
NdOnluk sayı  
NlHarf numarası  
NoDiğer sayı  
PNoktalama 
PcBağlayıcı noktalama  
PdTire imi 
PeKapama imi  
PfSonlandırma imi  
PiBaşlatma imi  
PoDiğer noktalama  
PsAçma imi  
SSimge 
ScPara simgesi  
SkDeğiştirici simge
SmMatematiksel simge  
SoDiğer simge  
ZAyraç 
ZlSatır ayracı  
ZpParagraf ayracı  
ZsBoşluk ayracı  

"Greek" veya "InMusicalSymbols" gibi ek özellikler PCRE tarafından desteklenmemektedir.

Harf büyüklüğüne duyarsız eşleşme belirtilmesi bu önceleme dizilimlerini etkilemez. Örneğin, \p{Lu} şablonu daima sadece büyük harflerle eşleşecektir.

\X işleci, bir ek Evrenkod dizilimi biçimindeki herhangi bir Evrenkod karakteri ile eşleşir. \X işleci (?>\PM\pM*) şablonuna eşdeğerdir.

Yani, bir im olmayan karakteri izleyen sıfır veya daha fazla sayıda im karakteri ile eşleşir ve bu dizilim bir atomik grup olarak ele alınır (aşağıya bakın). İm karaterleri genellikle kendilerinden önceki karakterleri etkileyen aksanlardır.

Evrenkodlu karakterlerle eşleşme hızlı değildir, çünkü PCRE on beş binden fazla karakter içeren bir kümeyi araştırmak zorundadır. \d ve \w gibi geleneksel işleçlerin PCRE'de Evrenkod özelliklerini kullanmamasının sebebi budur.

add a note add a note

User Contributed Notes 8 notes

up
4
huhwatnouDONTspamPLEASE at hotmail dot com
1 year 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
10
xuantoaiph at gmail dot com
3 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
6
mercury at caucasus dot net
7 years ago
An excellent article explaining all these properties can be found here: http://www.regular-expressions.info/unicode.html
up
4
o_shes01 at uni-muenster dot de
6 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
1
Yzmir Ramirez
4 years ago
If you are working with older environments you will need to first check to see if the version of PCRE will work with unicode directives described above:

<?php

// Need to check PCRE version because some environments are
// running older versions of the PCRE library
// (run in *nix environment `pcretest -C`)

$allowInternational = false;
if (
defined('PCRE_VERSION')) {
    if (
intval(PCRE_VERSION) >= 7) { // constant available since PHP 5.2.4
       
$allowInternational = true;
    }
}
?>

Now you can do a fallback regex (e.g. use "/[a-z]/i"), when the PCRE library version is too old or not available.
up
0
php at lnx-bsp dot net
1 month 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
-1
suit at rebell dot at
7 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
}
?>
up
-3
o_shes01 at uni-muenster dot de
6 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
To Top