按字符属性匹配
字符属性类不写具体字符,而是写字符的类别,例如字母、数字、标点、空白分隔符,或某一语言文字。引擎根据字符的 Unicode 属性判定是否属于该类别,因此同一个写法可以覆盖多个字符集。
比区间可靠
用编码区间匹配非拉丁文字既难写又易错,属性类把这件事交给标准表。写多语言校验、汉字或标点识别时,属性类是首选;具体属性名与缩写以目标引擎的官方文档为准,不同引擎支持的集合并不完全一致。
基本信息
| 基本写法 | 反斜杠小写 p 加花括号属性名;大写 P 表示取反 |
|---|---|
| 常见类别 | 字母、大写字母、小写字母、十进制数字、标点、分隔符等 |
| 语言相关 | 部分引擎支持按文字系统筛选,例如汉字、希腊字母 |
| 支持情况 | PCRE、Java、.NET、RE2 等原生支持;JavaScript 需开启 Unicode 标志;Python 标准库正则不支持,需借助扩展库 |
| 生效前提 | 需要引擎处于 Unicode 处理模式,否则可能报错或不生效 |
| 属性名差异 | 同一类别在各引擎里的名字与缩写不尽相同,需按文档核对 |
典型使用场景
- 校验昵称只允许字母与汉字,排除数字与标点
- 从混排文本里提取全部汉字做后续处理
- 识别标点与空白分隔符,做分词前的预处理
- 统计文本中各类字符的比例,例如字母与数字占比
- 匹配不同语言的字母集合,避免为每种语言写一套区间
属性类的常见写法
属性类的常见写法
# 以下为示意写法,属性名与支持范围以目标引擎文档为准
\p{L}+ # 连续字母,不限语种
\p{Lu} # 大写字母
\p{Nd} # 十进制数字
\p{Han} # 汉字(部分引擎写作语言相关集合)
\P{P} # 取反:非标点字符
^[\p{L}\p{Nd}_]+$ # 字母数字下划线组成的标识符
(?u)\p{Script=Han} # 显式指定文字系统(视引擎语法而定)常见类别对照
| 类别 | 含义 | 典型用途 |
|---|---|---|
| 字母 | 各语种字母 | 姓名、昵称校验 |
| 大写与小写 | 按大小写细分 | 格式化与样式检查 |
| 十进制数字 | 十进制记数数字 | 数值字段校验 |
| 标点 | 各类标点符号 | 清洗与切分 |
| 分隔符 | 空白等分隔类 | 分词预处理 |
| 文字系统 | 按语言文字筛选 | 多语言内容识别 |
属性类与简写类不是一回事:简写类的范围由引擎语义设置决定,可能只在 ASCII 内生效;属性类直接引用 Unicode 属性,语义更明确。字符串校验场景优先选属性类。
各引擎对属性名的写法与支持列表存在差异,同一类别可能有两种拼法。跨语言移植时先跑一遍最小用例,确认属性名被接受且行为符合预期,再批量替换模式。