Wayne


Calendar
November | ||||||
---|---|---|---|---|---|---|
Sun | Mon | Tue | Wed | Thu | Fri | Sat |
29 | 30 | 31 | 1 | 2 | 3 | 4 |
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 1 | 2 |

Categories

Search

Random Posts

Counter
373101

Hot Posts

New Comments

New Messages

Links

RSS

正则表示汉字的问题
Wayne
posted @ Fri, 22 Oct 2010 09:30:14 +0000
in Experience
, 6553 readers
昨天有人跟我说可以用正则表示汉字,当然,是限于Unicode编码的,准确地说,是UCS2编码的汉字.然后给出了正则式:/[\u4e00-\u9fa5],或者[\x00-\xff]+
我读过《正则表达式》那本书,知道不同的程序对于正则的实现方式会略有区别,于是就问了,这是哪里的正则.同时,打开了我的VIM开始尝试.那边回答说这是Ultra Editor的.果然,VIM中两者都无法工作.
今天又琢磨了一阵,将第二个改为[\x00-\xff],去掉了最后的+号,在VIM中输入:%s/[\x00-\xff]/1/g,结果有效,成功地替换了汉字成1。但是却又发现一个神奇的现象:有个字始终替换不了,那个字就是"犯",UCS2编码72af.
而[\u4e00-\u9fa5]则一直没能成功.我想到原生的UE里面试试,但是不知道UE的正则如何启用.在查找里面打开了正则表达式的开关,然后输入这个式子,那是毫无作用,仅仅等于[4e009fa5].
===================== 以上写于2010-10-21=======================
今天又翻出这篇来,是因为最近做了次正则的汉字匹配,突然发现以前好像写错了。我必须用[^\x00-\xff]才能匹配到汉字,跟原来的正好相反!!
难道是当初笔误了吗?当时有两个人一起试验的啊,按理说没理由都看错的啊……
2011.7.15
Sat, 23 Oct 2010 13:11:26 +0000
Vim帮助里有说的(E769):“可以使用非 ASCII 字符,但字符值的距离不能超过 256.”
Mon, 01 Nov 2010 01:02:10 +0000
这句我完全没看明白…… 字符值的距离是什么?
Mon, 01 Nov 2010 13:07:15 +0000
就是你给的字符范围的大小啊。[\u4e00-\u9fa5]的“字符值的距离”就是 0x9fa5-0x4e00