[问题] 用 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