正则表示汉字的问题

Wayne posted @ Fri, 22 Oct 2010 09:30:14 +0000 in Experience , 6586 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

Avatar_small
依云 said:
Sat, 23 Oct 2010 13:11:26 +0000

Vim帮助里有说的(E769):“可以使用非 ASCII 字符,但字符值的距离不能超过 256.”

Avatar_small
Wayne said:
Mon, 01 Nov 2010 01:02:10 +0000

这句我完全没看明白…… 字符值的距离是什么?

Avatar_small
依云 said:
Mon, 01 Nov 2010 13:07:15 +0000

就是你给的字符范围的大小啊。[\u4e00-\u9fa5]的“字符值的距离”就是 0x9fa5-0x4e00


Login *


loading captcha image...
(type the code from the image)
or Ctrl+Enter