快好知 kuaihz

中文字符的正则匹配 备忘

不同扩展字符集中汉字的编码范围

根据UnicodeStandard 13.  Page 713提供的信息, 如下

表格18-1.  包含汉字的编码区域

区域 范围(十六进制) 注释

CJK 统一表意符 4E00–9FFF 常见

CJK 统一表意符  扩展 A 3400–4DBF 罕见

CJK 统一表意符  扩展 B 20000–2A6DF 罕见, 历史上用过

CJK 统一表意符  扩展 C 2A700–2B73F 罕见, 历史上用过

CJK 统一表意符  扩展 D 2B740–2B81F 不常见, 某些仍在使用

CJK 统一表意符  扩展 E 2B820–2CEAF 罕见, 历史上用过

CJK 统一表意符  扩展 F 2CEB0–2EBEF 罕见, 历史上用过

CJK 统一表意符  扩展 G 30000–3134F 罕见, 历史上用过

CJK 兼容表意符 F900–FAFF 重复字,可统一的变体,公司内部定义用字

CJK 兼容表意符 补充 2F800–2FA1F 可以统一的变体

所以,如果要匹配常用汉字,可以指定编码范围为4E00~9FFF. 如果要包括所有汉字(包括中日韩统一表意符及其扩展),应该联用以上所有范围或根据需要选择,也可以利用以下特性,如Unicode的语言Script来判断.

正则表达式中的其它特性:

1. Unicode Property(属性)

可以用Property来指定字符的功能分类(Unicode 标准 13.0  Page 104.),每个字符只属于某一种属性。例如

标准规定: P代表标点,Z代表分隔符,L代表字母,M代表联合标记,S代表符号,N代表数字。在每个大类下面还可以有一些更细的组合分类。以下这张截图是比较好的总结。

具体用法,如匹配标点可以用

p{P}

如果限定是闭合类型的标点(end punctuation),用 `p{Pe}`

对应它们的排除型数组则为

P{P}

或 `P{Pe}`

将反斜框后面的小写p换成大写P即可,花括号的内容不变。

支持属性的语言有各种 .net语言, Java,Ruby 1.9+, PHP,XPath,PowerShell,XPath。比如VB.net

2.Unicode Block(区域)

Unicode标准还有一个特性,根据编码的范围来限定。前面讲的汉字可以用

p{IsCJKUnifiedIdeographs}

来匹配CJK统一表意符(包括中日韩汉字)。

其它的Block有,我圈出来几个和汉字相关的或感兴趣的(看不清楚的可以保存下来再用看图软件打开这个图)

3. Unicode Script 语言

除没有赋值的码点外, 每个Unicode码值都归属于某个Unicode Script(语言).

Unicode的编码表就是按语言(script)来分解的.

值得注意的是, 不同的语言对Unicode Script的支持不一样.

1) VB6,JavaScript不支持Unicode 的各种属性(所有这些p{x}的用法都不支持)

2) VB.net, C#等不支持Unicode Script,

3) 支持Unicode 语言的,

3.1) Perl中用`p{Han}` 或 `p{IsHan}`都可以.

3.2) Java则只认`p{IsHan}`

3.3 )Delphi (TRegEx类) , PHP, PCRE (1和2) 只认`p{Han}`

这些细微的差别不用特别去记住,只需要理解这些属性是什么意思就好. 具体怎么用,用正则测试工具试一下就知道了.

不同的语言中表达Unicode的格式稍有差异

,这里也备忘一下:

为匹配常用汉字:

Python,VB6,  VB.net,VBScript,C#,JavaScript,Java,PowerShell中用

[u4E00-u9FFF]+

在反斜杠后面用u再跟Hex值.

Perl,Delphi(TRegEx)在反斜框后面用x再花括号内放置Hex值:

 [x{4E00}-x{9FFF}]+

可以这样处理,假定我们默认都是用uFFFF和UFFFFFFFF这样的语法,如果不行,就换成x{FFFF}再试一下;

但也有些正则引擎不支持BMP之外的范围,这就没办法了.

在Latex或MathJax中,表示一个特定Unicode字符用

$unicode[字体名]{0x十六进制码值}$

不需要指定字体时, 方括号部分可以省略(含方括号本身).

推荐两个东东:

正则表达式的图书,推荐余晟的<正则指引>

正则表达式的测试工具,推荐RegexBuddy. 上面的好几个截图都是向这个兄弟借用的

本站资源来自互联网,仅供学习,如有侵权,请通知删除,敬请谅解!
搜索建议:中文字符的正则匹配 备忘  正则  正则词条  备忘  备忘词条  中文  中文词条  匹配  匹配词条  字符  字符词条  
观点

 谈“独立原创能力”

谈“独立原创能力” 刘庆生(中国地质大学,武汉) 近日与几位国家青年人才入围人员交流汇报答辩有关事情。他们有人给我发来人才组织机构给他们提供...(展开)