一般来说,数字字符解释[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 匹配规则的更多相关文章

  1. JavaScript中正则表达式判断匹配规则以及常用的方法

    JavaScript中正则表达式判断匹配规则以及常用的方法: 字符串是编程时涉及到的最多的一种数据结构,对字符串进行操作的需求几乎无处不在. 正则表达式是一种用来匹配字符串的强有力的武器.它的设计思想 ...

  2. 【RegExp】JavaScript中正则表达式判断匹配规则以及常用方法

    字符串是编程时涉及到的最多的一种数据结构,对字符串进行操作的需求几乎无处不在. 正则表达式是一种用来匹配字符串的强有力的武器.它的设计思想是用一种描述性的语言来给字符串定义一个规则,凡是符合规则的字符 ...

  3. 廖雪峰Java9正则表达式-1正则表达式入门-2正则表达式匹配规则

    正则表达式的匹配规则: 从左到右按规则匹配 匹配规则及示例 可以匹配 不能匹配 "abc" "abc" 不能匹配:"ab", "A ...

  4. servlet的url-pattern匹配规则

    首先需要明确几容易混淆的规则: servlet容器中的匹配规则既不是简单的通配,也不是正则表达式,而是特定的规则.所以不要用通配符或者正则表达式的匹配规则来看待servlet的url-pattern. ...

  5. java-servlet的url-pattern匹配规则详细描述

    http://www.cnblogs.com/51kata/p/5152400.html http://www.cnblogs.com/canger/p/6084846.html 一.概述 在利用se ...

  6. 详解servlet的url-pattern匹配规则.RP

    首先需要明确几容易混淆的规则: servlet容器中的匹配规则既不是简单的通配,也不是正则表达式,而是特定的规则.所以不要用通配符或者正则表达式的匹配规则来看待servlet的url-pattern. ...

  7. nginx-location正则表达式匹配规则及动静分离

    nginx-location正则表达式匹配规则及动静分离  发表于 2018年03月5日 |  分类于 nginx|  0 nginx,location常用正则表达式,及nginx动静分离 nginx ...

  8. JavaScript:正则表达式匹配规则

    正则表达式的语法规则: <!DOCTYPE html> <html lang="en"> <head> <meta charset=&qu ...

  9. RegExp正则表达式的匹配

    JavaScript RegExp 对象 RegExp 对象 正则表达式是描述字符模式的对象. 正则表达式用于对字符串模式匹配及检索替换,是对字符串执行模式匹配的强大工具. 语法 var patt=n ...

随机推荐

  1. Microsoft Azure Overview

    Day1 Overview 1. Cloud - Internet scaling / Internet connects / Resource pool 2. Why the cloud?  Rap ...

  2. mysql占用磁盘IO过高的解决办法

    一.现象 最近发现Mysql服务器磁盘IO一直很高 [root@push-- ~]# iostat -k -d -x Linux -.el7.x86_64 (push--) 2019年07月05日 _ ...

  3. [工具] BurpSuite--XssValidator插件

    0x00 安装 所需软件: 1.burpsuite 2.xssvalidator 源码:https://github.com/nVisium/xssValidator(按照编译指导编译) burpsu ...

  4. 【洛谷P1417】烹调方案 贪心+背包dp

    题目大意:一共有 n 件食材,每件食材有三个属性,ai,bi和ci,如果在t时刻完成第i样食材则得到ai-t*bi的美味指数,用第i件食材做饭要花去ci的时间.众所周知,gw的厨艺不怎么样,所以他需要 ...

  5. 利用transform skewX制作平行四边形导航菜单

    平行四边形其实是矩形的超集:它的各条边是两两平行的,但各个角则不一定都是直角.在视觉设计中,平行四边形往往可以传达出一种动感.让我们试着用 CSS 创建一个按钮状的平行四边形链接.我们的起点就是一个普 ...

  6. 2018微信小程序官方示例源码最新版

    忘记从哪获得的 CSDN  可以支持一下 谢谢你们 https://download.csdn.net/download/lan1128/10197682 当然也有免费的 代码在码云上免费公开 点个关 ...

  7. mysql慢查询分析

    mysql慢查询分析 Posted: 29. 08. 2014 | Author: zdz | Category: mysql MySQL 慢查询日志分析 1. pt-query-digest分析慢查 ...

  8. mongodb导出导入实例记录

    mongodb导出导入实例记录 平时很用mongodb,所以用到了,就需要去网上搜索方法,干脆将自己的实际经历记录下来,方便日后使用. # 大致需求 源库:db_name_mongo 源IP:192. ...

  9. 树莓派开机自动启动Chomium浏览器并打开指定网页

    树莓派开机自动启动Chomium浏览器并打开指定网页 cd /home/pi/.config mkdir autostart cd autostart vi my.desktop [Desktop E ...

  10. electron 系统托盘 单击 双击事件冲突解决方法

    部分代码 // 任务栏点击事件 let timeCount = 0 tray.on('click', function (Event) { setTimeout(() => { if (time ...