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