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
Property | Matches | Notes |
---|---|---|
C | Other | |
Cc | Control | |
Cf | Format | |
Cn | Unassigned | |
Co | Private use | |
Cs | Surrogate | |
L | Letter | Includes the following properties: Ll, Lm, Lo, Lt 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 字符集在具体文字中定义。使用文字名可以匹配这些字符集中的一个字符。例如:
- \p{Greek}
- \P{Han}
不在确定文字中的则被集中到 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 |
欢迎补充!