Re: [問題] 用 regular Exp 比對中文的問題

看板Perl作者 (JK)時間7年前 (2017/05/04 20:08), 編輯推噓2(202)
留言4則, 3人參與, 最新討論串2/2 (看更多)
如果只是要判斷字串是否有中文,用這樣可以嗎? 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

05/05 01:18, , 1F
測資如果有空白或底線看起來會誤判,例如:帥哥 啦
05/05 01:18, 1F

05/05 01:19, , 2F
恐龍_啦,空白和底線應該不算中文字吧
05/05 01:19, 2F

05/05 09:23, , 3F
謝謝大大,我再來思考一下~
05/05 09:23, 3F

05/05 09:52, , 4F
那就 $char =~ /[\x00-\x7F]/ 排除ascii
05/05 09:52, 4F
文章代碼(AID): #1P2ndIne (Perl)
文章代碼(AID): #1P2ndIne (Perl)