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

看板Perl作者 (培根)時間7年前 (2017/05/04 12:49), 編輯推噓4(403)
留言7則, 4人參與, 最新討論串1/2 (看更多)
各位大大好, 小弟因為一些需要, 要將從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

05/04 15:52, , 1F
pattern改成/([\N{U+4E00}-\N{U+9FA5}]+)/試試看
05/04 15:52, 1F

05/04 16:02, , 2F
pattern 裡應該是 \x{4e00} 這樣的寫法吧?
05/04 16:02, 2F

05/04 17:21, , 3F
不確定差別在哪裡 都能work FYR:https://goo.gl/bjmmHQ
05/04 17:21, 3F

05/05 03:20, , 4F
perl對unicode支援很好啊 用 \p{Han}或 \p{CJK} 看看
05/05 03:20, 4F

05/05 03:21, , 5F
還有新版的perl對unicode新版本的支援度也較好
05/05 03:21, 5F

05/05 03:28, , 6F
05/05 03:28, 6F

05/05 09:17, , 7F
終於解決了! 謝謝大家~
05/05 09:17, 7F
文章代碼(AID): #1P2hBku1 (Perl)
文章代碼(AID): #1P2hBku1 (Perl)