常见中文正则表达式匹配结果比较

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

常见中文正则表达式匹配结果比较

刚开始用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, ^-^


续:

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]反而不能匹配中文,但又为什么匹配了英文、数字和特殊字符 "^" 呢?


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



分类匹配汉

字,不错,有启发。其实如果找到统一的那张大表,知道每个汉字在上面的对应坐标,就方便多了。但是情况好像是每种标准都有一张不同的表格、坐标。

不太清楚,我只知道以前都是使用 \x80-\xff 匹配所有中文的





问:
我想了很久没有想出来,请问正则表达式如何匹配汉字?
还有要匹配,除字母和数字以外的所有字符时如何写的,谢谢请高手指点一二
______________________________________________________________________________________________
答1:
匹配汉字:
[\u4e00-\u9fa5]

除字母和数字以外的所有字符时
[^0-9a-zA-Z]

______________________________________________________________________________________________
答2:
Q : 验证中文的正则表达式
主要解答者: saucer 提交人: linkman_cheng
感谢: mmkk、saucer
审核者: icyer 论坛对应贴子: 查看
A :

如何判断输入为中文?有什么实现方法?
---------------------------------------------------------------


提问前请先查看FAQ以及精华区,很多常见问题都已经有了
______________________________________________________________________________________________
答3:
我搜过了,但是搜索引擎总是出错误,所以又麻烦思归一次不好意思

非常感谢soucer(思归),jjstar

______________________________________________________________________________________________
答4:
可是我在ReguarExpressValidator 中用表达式
[\u4e00-\u9fa5]却说不正确



相关文档
最新文档