php正则匹配Unicode字符属性,可用于匹配检测多国语言

 自从 PHP 4.4.0 和 5.1.0, 三个额外的转义序列在选用 UTF-8模式时用于匹配通用字符类型。他们是:

\p{xx}
一个有属性 xx 的字符
\P{xx}
一个没有属性 xx 的字符
\X
一个扩展的 Unicode 字符

上面 xx 代表的属性名用于限制 Unicode 通常的类别属性。 每个字符都有一个这样的确定的属性,通过两个缩写的字母指定。 为了与 perl 兼容, 可以在左花括号 { 后面增加 ^ 表示取反。比如: \p{^Lu} 就等同于 \P{Lu}

如果通过 \p 或 \P 仅指定了一个字母,它包含所有以这个字母开头的属性。 在这种情况下,花括号的转义序列是可选的。

\p{L}\pL
支持的Unicode属性
Property Matches Notes
C Other  
Cc Control  
Cf Format  
Cn Unassigned  
Co Private use  
Cs Surrogate  
L Letter Includes the following properties: LlLmLoLt and Lu.
Ll Lower case letter  
Lm Modifier letter  
Lo Other letter  
Lt Title case letter  
Lu Upper case letter  
M Mark  
Mc Spacing mark  
Me Enclosing mark  
Mn Non-spacing mark  
N Number  
Nd Decimal number  
Nl Letter number  
No Other number  
P Punctuation  
Pc Connector punctuation  
Pd Dash punctuation  
Pe Close punctuation  
Pf Final punctuation  
Pi Initial punctuation  
Po Other punctuation  
Ps Open punctuation  
S Symbol  
Sc Currency symbol  
Sk Modifier symbol  
Sm Mathematical symbol  
So Other symbol  
Z Separator  
Zl Line separator  
Zp Paragraph separator  
Zs Space separator  

InMusicalSymbols 等扩展属性在 PCRE 中不支持

指定大小写不敏感匹配对这些转义序列不会产生影响,比如, \p{Lu} 始终匹配大写字母。

Unicode 字符集在具体文字中定义。使用文字名可以匹配这些字符集中的一个字符。例如:

不在确定文字中的则被集中到 Common。当前的文字列表中有:

支持的文字
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        

\X 转义匹配任意数量的 Unicode 字符。 \X 等价于 (?>\PM\pM*)

也就是说,它匹配一个没有 ”mark” 属性的字符,紧接着任意多个由 ”mark” 属性的字符。 并将这个序列认为是一个原子组(详见下文)。 典型的有 ”mark” 属性的字符是影响到前面的字符的重音符。

用 Unicode 属性来匹配字符并不快, 因为 PCRE 需要去搜索一个包含超过 15000 字符的数据结构。 这就是为什么在 PCRE中 要使用传统的转义序列\d、 \w 而不使用 Unicode 属性的原因。

源文链接:http://php.net/manual/zh/regexp.reference.unicode.php 

语种对应表

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 Kharoshthi
Khmer 高棉语
Lao 老挝
Latin 拉丁
Lepcha 雷布查人
Limbu Limbu
Linear_B Linear_B
Lisu 傈僳族
Lycian 利西亚人的
Lydian 吕底亚人的
Malayalam 马拉雅拉姆语
Mandaic Mandaic
Meetei_Mayek Meetei_Mayek
Meroitic_Cursive Meroitic_Cursive
Meroitic_Hieroglyphs 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 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  

 

欢迎补充!