正则表达式——Unicode 属性
每一个 Unicode 字符,除了有 Code Point 与之对应外,还具体其他属性,在正则表达式中常用到三种 Unicode 属性: Unicode Property、Unicode Script,分别对应字符符的功能、所属代码区段、书写系统;它们的表现形式都类似\p{property}。

7.6.1 Unicode Property
Unicode Property 的记法类似\p{L}、\p{P}。它按照字符的功能分类 Unicode 字符,每个 Unicode 字符只能属于一个Unicode Property。
可以这样理解 Unicode Property:它并不关心字符所属的语言,只关心字符的功能,比如\p{Z}表示任意的空白字符或不可见的分隔符;\p{P}表示任意标点字符,等等。遇到中英文混排、全角、半角字符同时出现的情况,看可以用\p{Z}匹配所有的空白字符(而不用关心空格到底是全角空格还是半角空格),用\p{P}匹配所有的标点字符(而不用关心逗号到底是中文逗号还是英文逗号)。
如果把 Unicode Property 理解为一个“字符组”,name一定还有对应的排除型字符组,此排除型字符组的通行记法是将\p{property}中的小写改为大写P,写作\P{property}。这样,Script 对应的排除型字符组也是这样标记。
支持 Unicode Propery 的语言有.NET、Java、PHP和Ruby(限1.9以上版本),在PHP和Ruby中使用 Unicode Property 时,必须要开启 Unicode 模式。
.NET
Regex.IsMatch(",", "\\p{P}"); // => True
Java
",".matches("\\p{P}"); // => True
PHP
preg_match("/\\p{P}/u", ","); // => 1
Ruby 1.9
/\p{P}/n =~ "," # => 0
7.6.2 Unicode block
不同于 Unicoe Property,它按照编码区间划分 Unicode 字符,各个区间彼此联系但互不相交,所以每个 Unicode 编码中的每个字符都有唯一归属的 Unicode Block。
在 Unicode 编码表中,同一种语言的字符通常落在同一区间的,所以 Unicode Block 也可以粗略表示某类语言的字符,比如\p{InHebrew}表示希伯莱语字符,\p{InCJK_Unified_Ideographs}表示兼容 CJK(中文、日文、韩文)统一表意字符。如果细心阅读文档,会发现 Unicode Block 的名字虽然类似某种语言的名字,但都有 In(Java风格)或者 Is(.NET风格)前缀,所以它对应的还是“落在某个区间的 Unicode 字符”。
在本书介绍的语言中,只有 Java 和 .NET 支持 Unicode Block,但是记法不相同,下面以 CJK 统一表意字符为例,虽然记法不同,但功能呢是相同的,都可以匹配任意一个中文字符。
Java
"我".matches("\\p{InCJK_Unified_Ideographs}"); // => True
.NET
Regex.IsMatch("我", "\\p{InCJKUnifiedIdeographs}"); // => True
另外值得一用的是\p{InCJK_Symbols_and_Punctuation},从命名上来看,它覆盖了中文、日文、韩文中的大部分常见标点,但事实并非如此,比如全角逗号,就不在这个 Block 中。不过,所有标点都在\p{P}这个 Unicode Property 中。
全角逗号不属于\p{InCJK_Symbols_and_Punctuation}
"。".matches("\\p{InCJK_Symbols_and_Punctuation}"); // => True
",".matches("\\p{InCJK_Symbols_and_Punctuation}"); // => False
"。".matches("\\p{P}"); // => True
",".matches("\\p{P}"); // => True
7.6.3 Unicode Script
Unicode Script 按照字符所属的书写系统来划分 Unicode 字符,比如\p{Greek}表示希腊语字符,\p{Han}表示汉语(中文字符)。它的写法类似 Unicode Block,只是名字的开头没有 Is 或者 In。
在本书介绍的语言中,只有 PHP 和 Ruby(限1.9以上版本)支持 Unicode Script,PHP在使用 Unicode Script 时,必须开启 Unicode 模式。在这两种语言中,我们可以很方便地用\p{Han}来匹配中文字符。
PHP
preg_match("\\p{Han}/u", "我"); // => 1
Ruby 1.9
/\p{Han}/u =~ "我" # => 0
正则表达式——Unicode 属性的更多相关文章
- 正则表达式——Unicode 属性列表
7.7.1 Unicode Property 每个 Unicode 字符都只能属于一个 Unicode Property.所有的 Unicode Property 共分为7大类,30小类.大类的名 ...
- 正则表达式通过Unicode属性匹配
原文链接:http://zochen.iteye.com/blog/690716 Unicode 编码并不只是为某个字符简单定义了一个编码,而且还将其进行了归类. \pP 其中的小写 p 是 prop ...
- 利用Unicode属性移除文本中的标点符号
原文:http://bbs.csdn.net/topics/270033191 摘抄: str = str.replaceAll("[\\pP‘’“”]", "&qu ...
- 正则表达式pattern属性
你发现自己多久匆匆编写一些正则表达式验证一个特定的文本. 多亏了新的pattern属性,我们可以在标签处直接插入一个正则表达式. <form action="" method ...
- 正则表达式——Unicode 匹配规则
一般来说,数字字符解释[0-9],单词字符就是[0-9a-zA-Z_],空白字符则包括空格.回车等字符,但这是 ASCII 编码中的情况,在 Unicode 编码中并非如此. 因为包括了多种语 ...
- 正则表达式lastIndex属性浅析
有这样一段代码: var newDateStr = " 11 13:48:18"; var reg = new RegExp("[0-9]+","g& ...
- 正则表达式——Unicode
第 7 章 Unicode 7.1 关于编码 通常,英文编码较为统一,都采用ASCII编码或可以兼容ASCII编码(即编码表的前127位与ASCII编码一直,常见的各种编码,包括Unicode编码 ...
- 采用 Unicode 标点属性方式的正则表达式,可以去掉所有的标点符号,
public class Test { public static void main(String[] args) { String str = "!!!??!!!!%*)%¥!KTV去符 ...
- JavaScript学习笔记-正则表达式(RegExp对象)
正则表达式(RegExp对象) 1.正则表达式字面量,在脚本加载后编译.若你的正则表达式是常量,使用这种方式可以获得更好的性能,重复使用时不会重新编译: 2.使用构造函数创建的RegExp,提供了 ...
随机推荐
- 014-Zabbix的自动发现
Zabbix自动发现是通过(1)网络扫描或(2)代理主动发现实现监控.本文主要介绍网络扫描的发现方式,并深入介绍底层监控项的主动发现功能. 网络发现(Discovery) 对于网络发现最需要理解的就是 ...
- java高并发核心要点|系列2|锁的底层实现原理
上篇文章,我们主要讲了解决多线程之间共享数据的核心问题和解决方案,也讲了锁的简单分类. 那么,这把锁,我们应该怎么去实现呢?如果你是java语言设计者,你又会怎么去设计这个线程锁呢? 直觉告诉我们,我 ...
- robotframework 使用Chrome手机模拟器两种方法
Open Google Simulator1 ${device metrics}= Create Dictionary width=${360} height=${640} pixelRatio=${ ...
- 美国的电信巨头T-Mobile今天披露了另一起数据遭黑客泄露事件
您是T-Mobile预付费客户吗?如果是,您应该立即创建或更新您关联的帐户PIN /密码,以提供额外的保护.总部位于美国的电信巨头T-Mobile今天披露了另一起数据泄露事件,该事件最近暴露了一些使用 ...
- 那些年我写过的mysql命令
建表语句 #mysql5.7适用create table testfy ( id int primary key AUTO_INCREMENT, clipid int comment '影片编号', ...
- CodeForces-687A(DFS,染色)
链接: https://vjudge.net/problem/CodeForces-687A 题意: Recently, Pari and Arya did some research about N ...
- 1222/2516. Kup
题目描述 Description 首先你们得承认今天的题目很短很简洁... 然后,你们还得承认接下来这个题目的描述更加简洁!!! Task:给出一个N*N(1≤N≤2000)的矩阵,还给出一个整数K. ...
- linux-dns-11
1网卡设置配置文件里面DNS服务器地址设置,2.系统默认DNS服务器地址设置.3,hosts文件指定 生效顺序是: 1 hosts文件 ---- 2 网卡配置文件DNS服务地址 ---3 /etc/r ...
- sh_10_体验模块
sh_10_体验模块 import sh_10_分隔线模块 sh_10_分隔线模块.print_line("-", 50) print(sh_10_分隔线模块.name)
- vue-cli 构建的 Vue 项目用 localhost 加 端口 能访问,但是切换到 ip 加 端口 就不能访问
问题出在 webpack 的配置 在 config 文件夹下, 找到 index.js 目录, 找到如下代码 host: 'localhost', // can be overwritten by p ...