Unicode 字符属性
发表日期:2021-07-01 08:57:00 | 来源: | | 浏览(998) 分类:PCRE 正则语法
Unicode 字符属性
自 PHP 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 |
包含以下属性:Ll 、
Lm 、Lo 、Lt 、
Lu .
|
Ll |
小写字母 | |
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 可扩展字符集(Unicode extended grapheme clusters)。
可扩展字符集是一个或多个 Unicode 字符,组合表达了单个象形字符。
因此无论渲染时实际使用了多少个独立字符,可以视该 Unicode 等同于 .
,
会匹配单个组合后的字符。
小于 PCRE 8.32 的版本中(对应小于 PHP 5.4.14 的内置绑定 PCRE 库),
\X
等价于 (?>\PM\pM*)
。
也就是说,它匹配一个没有 ”mark” 属性的字符,紧接着任意多个由 ”mark” 属性的字符。
并将这个序列认为是一个原子组(详见下文)。
典型的有 ”mark” 属性的字符是影响到前面的字符的重音符。
用 Unicode 属性来匹配字符的速度并不快,
因为 PCRE 需要去搜索一个包含超过 15000 字符的数据结构。
这就是为什么在 PCRE中 要使用传统的转义序列\d
、
\w
而不使用 Unicode 属性的原因。
- PHP(0)
- PHP杂项(34)
- PHP基础-李炎恢系列课程(20)
- 中文函数手册(0)
- 错误处理 函数(13)
- OPcache 函数(6)
- PHP 选项/信息 函数(54)
- Zip 函数(10)
- Hash 函数(15)
- OpenSSL 函数(63)
- Date/Time 函数(51)
- 目录函数(9)
- Fileinfo 函数(6)
- iconv 函数(11)
- 文件系统函数(81)
- 多字节字符串 函数(57)
- GD 和图像处理 函数(114)
- 可交换图像信息(5)
- Math 函数(50)
- 程序执行函数(11)
- PCNTL 函数(23)
- JSON 函数(4)
- SPL 函数(15)
- URL 函数(10)
- cURL 函数(32)
- 网络 函数(33)
- FTP 函数(36)
- Session 函数(23)
- PCRE 函数(11)
- PCRE 正则语法(19)
- 简介(0)
- 分隔符(0)
- 元字符(0)
- 转义序列(反斜线)(0)
- Unicode 字符属性(0)
- 锚(0)
- 句点(0)
- 字符类(方括号)(0)
- 可选路径(|)(0)
- 内部选项设置(0)
- 子组(子模式)(0)
- 重复/量词(0)
- 后向引用(0)
- 断言(0)
- 一次性子组(0)
- 条件子组(0)
- 注释(0)
- 递归模式(0)
- 性能(0)
- 数组 函数(81)
- 类/对象 函数(18)
- 函数处理 函数(13)
- 变量处理 函数(37)
- SimpleXML 函数(3)
- 杂项 函数(31)
- 字符串 函数(101)