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

作者: z20240 (培根)   2017-05-04 12:49:48
各位大大好,
小弟因為一些需要,
要將從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-04 15:52:00
pattern改成/([\N{U+4E00}-\N{U+9FA5}]+)/試試看
作者: CindyLinz (Cindy Wang)   2017-05-04 16:02:00
pattern 裡應該是 \x{4e00} 這樣的寫法吧?
作者: lgen7604   2017-05-04 17:21:00
不確定差別在哪裡 都能work FYR:https://goo.gl/bjmmHQ
作者: flu (Crazy Rhythm)   2017-05-05 03:20:00
perl對unicode支援很好啊 用 \p{Han}或 \p{CJK} 看看還有新版的perl對unicode新版本的支援度也較好example https://pastebin.com/UU6Z6Qnb
作者: z20240 (培根)   2017-05-05 09:17:00
終於解決了! 謝謝大家~

Links booklink

Contact Us: admin [ a t ] ucptt.com