免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 26157 | 回复: 3
打印 上一主题 下一主题

常见中文正则表达式匹配结果比较 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-08-13 04:49 |只看该作者 |倒序浏览
刚开始用perl,要解决匹配汉字的问题,在网上搜到一些正则表达式,一时有搞不清区别到底在哪?就写这么个小程序测试了一下,结果让我很惊讶!很多高手不都说[\u4e00-\u9fa5]匹配汉字吗?可是结果恰好相反,我也不知道是那里用错了,还请大家指点!
还有,哪位知道中文的标点怎么匹配?先谢了!
#! usr/bin/perl
use UTF8;
@pattern = ('[\u4e00-\u9fff]','[^\u4e00-\u9fff]','[chr(0xa1)-chr(0xff)]','[^chr(0xa1)-chr(0xff)]','[\x80-\xff][\x80-

\xff]','[^\x80-\xff][^\x80-\xff]','[\x80-\xff]','[^\x80-\xff]','[\u4e00-\u9fa5\uf900-\ufa2d]','[^\u4e00-\u9fa5\uf900-

\ufa2d]','[\u4e00-\u9fa5]','[^\u4e00-\u9fa5]','[\x00-\xff]','[^\x00-\xff]');

$d = '我亲爱的2只Maomi,你知道吗?我在想你们^-^';
#mao是全角下输入的,?也是在中文状态下输入的,其他标点是英文状态下的
foreach $p (@pattern)
{@result = ($d =~ /($p+)/isg);
print "模式$p匹配结果为:@result\n";
}

我把匹配结果分了下类:
模式[\u4e00-\u9fff]匹配结果为:2 mi ^ ^
模式[^\u4e00-\u9fff]匹配结果为:我亲爱的 只Mao ,你知道吗?我在想你们 -
模式[\u4e00-\u9fa5]匹配结果为:2 mi ^ ^
模式[^\u4e00-\u9fa5]匹配结果为:我亲爱的 只Mao ,你知道吗?我在想你们 –
模式[\u4e00-\u9fa5\uf900-\ufa2d]匹配结果为:2 mi ^ ^
模式[^\u4e00-\u9fa5\uf900-\ufa2d]匹配结果为:我亲爱的 只Mao ,你知道吗?我在想你们 -

模式[chr(0xa1)-chr(0xff)]匹配结果为:2 mi, ^-^
模式[^chr(0xa1)-chr(0xff)]匹配结果为:我亲爱的 只Mao 你知道吗?我在想你们
模式[\x80-\xff]匹配结果为:我亲爱的 只Mao 你知道吗?我在想你们
模式[^\x80-\xff]匹配结果为:2 mi, ^-^

模式[\x00-\xff]匹配结果为:我亲爱的2只Maomi,你知道吗?我在想你们^-^
模式[^\x00-\xff]匹配结果为:

模式[\x80-\xff][\x80-\xff]匹配结果为:我亲爱的 只Mao 你知道吗?我在想你们
模式[^\x80-\xff][^\x80-\xff]匹配结果为:mi, ^-^

论坛徽章:
0
2 [报告]
发表于 2007-08-13 05:56 |只看该作者
续:

1、以下属于UTF-8 (Unicode)编码范畴
\u4e00-\u9fa5 (中文)
\x3130-\x318F (韩文
\xAC00-\xD7A3 (韩文)
\u0800-\u4e00 (日文)

2、以下属于GBK (GB2312/GB18030)范畴
x00-\xff
GBK双字节编码范围
\x20-\x7f
ASCII
\xa1-\xff
中文
\x80-\xff
中文

以上的结果可不可以这样分析:




因为我输入的$d是GBK编码,所以,在用
[\x80-\xff],\x00-\xff]和
[\x80-\xff][\x80-\xff]时得到了想要的结果(中文),但
[chr(0xa1)-chr(0xff)]的结果又怎么解释呢?

而用
[\u4e00-\u9fff],
[\u4e00-\u9fa5]和
[\u4e00-\u9fa5\uf900-\ufa2d]反而不能匹配中文,但又为什么匹配了英文、数字和特殊字符 "^" 呢?


搞不懂了!哪位明白,给理理思路吧!

论坛徽章:
0
3 [报告]
发表于 2007-08-13 11:33 |只看该作者
分类匹配汉字,不错,有启发。其实如果找到统一的那张大表,知道每个汉字在上面的对应坐标,就方便多了。但是情况好像是每种标准都有一张不同的表格、坐标。

论坛徽章:
0
4 [报告]
发表于 2007-08-14 17:21 |只看该作者
不太清楚,我只知道以前都是使用 \x80-\xff 匹配所有中文的
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP