作者z20240 (培根)
看板Perl
標題[問題] 用 regular Exp 比對中文的問題
時間Thu May 4 12:49:48 2017
各位大大好,
小弟因為一些需要,
要將從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), 來自: 1.160.23.11
※ 文章網址: https://www.ptt.cc/bbs/Perl/M.1493873390.A.E01.html
推 lgen7604: pattern改成/([\N{U+4E00}-\N{U+9FA5}]+)/試試看 05/04 15:52
推 CindyLinz: pattern 裡應該是 \x{4e00} 這樣的寫法吧? 05/04 16:02
推 flu: perl對unicode支援很好啊 用 \p{Han}或 \p{CJK} 看看 05/05 03:20
→ flu: 還有新版的perl對unicode新版本的支援度也較好 05/05 03:21
→ z20240: 終於解決了! 謝謝大家~ 05/05 09:17