作者jkchang (JK)
看板Perl
標題Re: [問題] 用 regular Exp 比對中文的問題
時間Thu May 4 20:08:47 2017
如果只是要判斷字串是否有中文,用這樣可以嗎?
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看得懂...
: 多謝...
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 203.67.167.102
※ 文章網址: https://www.ptt.cc/bbs/Perl/M.1493899730.A.C68.html
推 lgen7604: 測資如果有空白或底線看起來會誤判,例如:帥哥 啦 05/05 01:18
→ lgen7604: 恐龍_啦,空白和底線應該不算中文字吧 05/05 01:19
推 z20240: 謝謝大大,我再來思考一下~ 05/05 09:23
→ jkchang: 那就 $char =~ /[\x00-\x7F]/ 排除ascii 05/05 09:52