Re: [问题] 用 regular Exp 比对中文的问题

楼主: jkchang (JK)   2017-05-04 20:08:47
如果只是要判断字串是否有中文,用这样可以吗?
if (/[\x80-\xff]/) {
print $_;
}
换个方向做,将字符一个一个取出,然后将正常字符排除,然后把剩下的接起来:
#!/usr/bin/perl
while (<DATA>) {
$str = "";
while (/(.)/g) {
$char = $1;
unless ($char =~ /[0-9a-zA-Z#]/) {
$str .= $char;
}
}
if ($str ne "") {
print "$str\n";
}
}
__DATA__
08帅哥啦
09book#PERL
10恐龙啦
100perl
结果:
帅哥啦
恐龙啦
在Perl食谱(上) 6.18 比对多重字节字符有提到,可以参考他的方式
※ 引述《z20240 (培根)》之铭言:
: 各位大大好,
: 小弟因为一些需要,
: 要将从mySql DataBase 中捞出来的名称字段(varchar)滤出是否为中文字。
: 我在网络上找寻utf8的中文范围在u4e00-u9fa5
: 但是我用 perl 却怎么也match 不到
: 以下是我的 code
: for (@output){
: Encode::_utf8_on( $_->{name} );
: if ($_->{name} =~ /([\u4e00-\u9fa5])+/) {
: print " ($1) \n";
: }
: }
: match 到的内容都很奇怪。
: 例如有一笔资料:08帅哥啦
: match 到的是 (08) 而不是 (帅哥啦)
: 感觉上 perl 似乎并不认得 \u4e00 这种的表示方法...
: 请问高手们该怎么在 regular 中表示中文字,可以让perl看得懂...
: 多谢...
作者: lgen7604   2017-05-05 01:18:00
测资如果有空白或底线看起来会误判,例如:帅哥 啦恐龙_啦,空白和底线应该不算中文字吧
作者: z20240 (培根)   2017-05-05 09:23:00
谢谢大大,我再来思考一下~
楼主: jkchang (JK)   2017-05-05 09:52:00
那就 $char =~ /[\x00-\x7F]/ 排除ascii

Links booklink

Contact Us: admin [ a t ] ucptt.com