正则表达式——Unicode 匹配规则
一般来说,数字字符解释[0-9],单词字符就是[0-9a-zA-Z_],空白字符则包括空格、回车等字符,但这是 ASCII 编码中的情况,在 Unicode 编码中并非如此。
因为包括了多种语言和字符,所以在 Unicode 编码中,全角数字0、1、2之类也算作“数字字符”,可以由\d匹配;中文字符,也可以算作“单词字符”,由\w匹配;同样的道理,中文的全角空格(码值为30 ff),也可以算作“空白字符”,由\s匹配。所以,如果在 Python 2 中指定了正则表达式使用 Unicode 模式(最简单的方式解释在正则表达式的开头指定模式修饰符(?u)),\d,\w,\s就能匹配全角数字、中文字符、全角空格。对于这种情况,本书中称为 Unicode 匹配规则;相应地,之前 ASCII 编码中的匹配,称为 ASCII 匹配规则。

Unicode 模式下\d、\w、\s的匹配
| 简记法 | ASCII 匹配规则 | Unicode 匹配规则 |
|---|---|---|
| \w | [0-9a-zA-Z_] | [\p{Ll}\p{Lu}\p{Lt}\p{Lo}\p{Lm}\p{Nd}\p{Pc}] |
| \d | [0-9] | [\p{Nd}] |
| \s | \t,\n,\v,\f,\r,\x20 | [\f\n\r\t\v\x85\p{Z}] |
注:\p{L}表示任意语言中的字母字符(包括英文字母和汉字);
\p{M}表示用来与其他字符结合的字符(声调、元音变化符等);
\p{Nd}表示任何书写系统中的 0~9 字符,汉字全角字符1、2等也算;
\p{N1}表示形如字符的数字,比如罗马数字;
\p{Pc}表示类似下划线之类的字符;
\p{InEnclosedAlphanumerics}表示被包围的数字或字符,比如①;
\p{L}表示任意语言中的字母字符(包括英文字母和汉字);
有时候,这样的规定确实让人抓狂:假设你希望用正则表达式\d{6,12}来验证一个长度在 6 到 12 之间的数字字符串,却没有留意\d能匹配全角数字,验证就可能出错;所以,一定要注意此类问题。
常用语言中的匹配规则
| 语言 | 字符组简记法的匹配规则 |
|---|---|
| .NET | 默认采用 Unicode 匹配规则,但可以显示指定采用 ASCII 匹配规则 |
| Java | ASCII 匹配规则 |
| Javascript | ASCII 匹配规则 |
| PHP | ASCII 匹配规则 |
| Python 2 | 默认采用 ASCII 匹配规则,但可以显示指定采用 Unicode 匹配规则 |
| Python 3 | 默认采用 Unicode 匹配规则,但可以显示指定采用 ASCII 匹配规则 |
| Ruby 1.8 | 默认采用 ASCII 匹配规则,显示指定 Unicode 模式之后,只有\w使用 Unicode 匹配规则 |
| Ruby 1.9 | Unicode 匹配规则 |
注1:一般来说,单词边界\b能匹配的位置是:一端是单词字符,一端不是单词字符(也可以什么都没有),其中单词字符的规定与\w一样。Java 中则不是这样,它的细节比较复杂,以后再说。
注2:在Python 3 中可以在表达式最开始用(?a)指定 ASCII 模式。
注3:本书中说的 Ruby 1.9 指的是 Ruby 1.9.1 及以上版本,并不包含 Ruby 1.9.0,因为这个版本使用非常少,而且有一些非常奇怪的表现。
正则表达式——Unicode 匹配规则的更多相关文章
- JavaScript中正则表达式判断匹配规则以及常用的方法
JavaScript中正则表达式判断匹配规则以及常用的方法: 字符串是编程时涉及到的最多的一种数据结构,对字符串进行操作的需求几乎无处不在. 正则表达式是一种用来匹配字符串的强有力的武器.它的设计思想 ...
- 【RegExp】JavaScript中正则表达式判断匹配规则以及常用方法
字符串是编程时涉及到的最多的一种数据结构,对字符串进行操作的需求几乎无处不在. 正则表达式是一种用来匹配字符串的强有力的武器.它的设计思想是用一种描述性的语言来给字符串定义一个规则,凡是符合规则的字符 ...
- 廖雪峰Java9正则表达式-1正则表达式入门-2正则表达式匹配规则
正则表达式的匹配规则: 从左到右按规则匹配 匹配规则及示例 可以匹配 不能匹配 "abc" "abc" 不能匹配:"ab", "A ...
- servlet的url-pattern匹配规则
首先需要明确几容易混淆的规则: servlet容器中的匹配规则既不是简单的通配,也不是正则表达式,而是特定的规则.所以不要用通配符或者正则表达式的匹配规则来看待servlet的url-pattern. ...
- java-servlet的url-pattern匹配规则详细描述
http://www.cnblogs.com/51kata/p/5152400.html http://www.cnblogs.com/canger/p/6084846.html 一.概述 在利用se ...
- 详解servlet的url-pattern匹配规则.RP
首先需要明确几容易混淆的规则: servlet容器中的匹配规则既不是简单的通配,也不是正则表达式,而是特定的规则.所以不要用通配符或者正则表达式的匹配规则来看待servlet的url-pattern. ...
- nginx-location正则表达式匹配规则及动静分离
nginx-location正则表达式匹配规则及动静分离 发表于 2018年03月5日 | 分类于 nginx| 0 nginx,location常用正则表达式,及nginx动静分离 nginx ...
- JavaScript:正则表达式匹配规则
正则表达式的语法规则: <!DOCTYPE html> <html lang="en"> <head> <meta charset=&qu ...
- RegExp正则表达式的匹配
JavaScript RegExp 对象 RegExp 对象 正则表达式是描述字符模式的对象. 正则表达式用于对字符串模式匹配及检索替换,是对字符串执行模式匹配的强大工具. 语法 var patt=n ...
随机推荐
- idea 添加静态注释和live Templates
静态注释 /** * @Description * @Author wzz * @Date ${DATE} ${TIME} */ Live Templates 1.新建一个自己的添加组如图:Mygro ...
- [工具] BurpSuite--XssValidator插件
0x00 安装 所需软件: 1.burpsuite 2.xssvalidator 源码:https://github.com/nVisium/xssValidator(按照编译指导编译) burpsu ...
- Mvc Excel导入加事务加导出
导出 public FileResult Input() { DataTable dt = new DataTable("dd"); using (SqlConnection co ...
- Python-一些总结
背景 主要是用来记录我在学习python过程中学习到他人的一些建议和自己的经验,有些内容可能并不妥,如果有请及时通知我纠正,谢谢.qq:472668561 我使用的python版本是3.7.4. 内容 ...
- HDU-2389-Rain on your Parade (最大匹配,kopcroft-karp)
链接: https://vjudge.net/problem/HDU-2389 题意: You're giving a party in the garden of your villa by the ...
- 【NOIP2012模拟10.25】单元格
题目 在一个R行C列的表格里,我们要选出3个不同的单元格.但要满足如下的两个条件: (1)选中的任意两个单元格都不在同一行. (2)选中的任意两个单元格都不在同一列. 假设我们选中的单元格分别是:A, ...
- 树莓派VI命令大全(附vim使用异常,卸载重新安装步骤)
vi有3个模式:插入模式.命令模式.低行模式. 插入模式:在此模式下可以输入字符,按ESC将回到命令模式. 命令模式:可以移动光标.删除字符等. 低行模式:可以保存文件.退出vi.设置vi.查找等功能 ...
- 【ipc-mq】根据mq的key查看使用进程
使用ipcs -q可以得到key与msqid的对应关系,从而找到msgid webadmin@172.172.179.3:/usr/local/webapps/test_ma[17:17:36]$ i ...
- js-点击tab按钮,同一页面显示不同的内容
效果: html: JS: css: .tabs-two{ .two{ display: inline-block; font-size:14px; height: 17px; font-weight ...
- Java对数组和列表的排序1.8新特性
Java对数组列表的排序 数组 Integer[] a = new Integer[] { 1, 2, 3, 4, 5, 6, 9, 8, 7, 4, 5, 5, 6, 6 }; Arrays.sor ...