作者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://webptt.com/cn.aspx?n=bbs/Perl/M.1493873390.A.E01.html
1F:推 lgen7604: pattern改成/([\N{U+4E00}-\N{U+9FA5}]+)/试试看 05/04 15:52
2F:推 CindyLinz: pattern 里应该是 \x{4e00} 这样的写法吧? 05/04 16:02
4F:推 flu: perl对unicode支援很好啊 用 \p{Han}或 \p{CJK} 看看 05/05 03:20
5F:→ flu: 还有新版的perl对unicode新版本的支援度也较好 05/05 03:21
7F:→ z20240: 终於解决了! 谢谢大家~ 05/05 09:17