免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2596 | 回复: 3
打印 上一主题 下一主题

如何提取字符串中开头的中文部分 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-09-15 14:23 |只看该作者 |倒序浏览
字符串以中文开头,不确定的n个中文后会开始出现非中文字符。
我想得到开头的中文部分,和剩余的部分。

比如 $str = "中文h测试",字符串是utf8编码,我想要得到"中文"和"h测试"这两部分。

论坛徽章:
0
2 [报告]
发表于 2009-09-15 14:36 |只看该作者
可以找下中文的范围\uxxxx-\uxxxx
或者知道非中文的范围通常是\w

论坛徽章:
0
3 [报告]
发表于 2009-09-15 22:30 |只看该作者
谢谢楼上的。
搜索了下,中文的unicode编码范围4e00-0x9fa5,不知道准确不。

我用下面的方法,可以得出结果,不过代码很笨拙。
#!/usr/bin/perl

use strict;
use warnings;
use utf8;

binmode STDOUT, ":utf8";

my $str = "中文d测试";
my @str1;

foreach my $w (split //, $str) {
&nbsp;&nbsp;&nbsp;&nbsp;if (ord($w) > 0x4e00 && ord($w) < 0x9fa5) {
&nbsp;&nbsp;&nbsp;&nbsp;       push @str1, $w;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else {
&nbsp;&nbsp;&nbsp;&nbsp;       last;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
}
my $str1 = join "", @str1;
my $str2 = substr($str, scalar @str1);
print "$str1 => $str2";

论坛徽章:
0
4 [报告]
发表于 2009-09-15 22:33 |只看该作者
如果用正则表达式来匹配中文,是怎么样的

/([\x4e00-\x9fa5]+)(.*)/ 我用这个不成功
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP