免费注册 查看新帖 |

Chinaunix

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

split的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-03-13 10:44 |只看该作者 |倒序浏览
#!/usr/bin/perl

my ($date_old,$date_new);
$date_old='20090314';
$date_new=join "-",split /(\d{4})(\d{2})(\d{2})/,$date_old;
print $date_new;
打印:
-2009-03-14

#!/usr/bin/perl

my ($date_old,$date_new);
$date_old='2009 03 14';
$date_new=join "-",split /\s+/,$date_old;

print $date_new;
打印:
2009-03-14


我就是想把获得的日期的中间加上“-”,请问一下第一种为什么前面有一个“-”,谢谢。

论坛徽章:
0
2 [报告]
发表于 2009-03-13 11:07 |只看该作者
print scalar split /(\d{4})(\d{2})(\d{2})/,$date_old;


你这么写很别扭啊

论坛徽章:
0
3 [报告]
发表于 2009-03-13 11:09 |只看该作者
$date_old =~ s/(\d{4})(\d{2})(\d{2})/$1-$2-$3/;

论坛徽章:
0
4 [报告]
发表于 2009-03-13 11:16 |只看该作者
我来试着解释一下
首先先用个例子来解释一下split 中使用group capture
1.
my $str = 'hello world';
print Dumper split(/(\s)/, $str);

output:
$VAR1 = 'hello';
$VAR2 = ' ';
$VAR3 = 'world';

这里可以看到, 我们得到3个元素被\s分开的helloworld和被(\s)捕获的' '

知道了这个就不难理解你的那个程序了
\d{4})\d{2}\d{2}对'20090314'进行分割返回的是''
由于你使用了() 那么split在返回一个 ' '的同时会返回()所捕获的2009 03 14
join '-',  ('', 2009, 03, 14)第一个元素是空串所以开头就是一个-

BTW: 在处理定长数据是unpack通常是更好的选择
如果用正则的话可以直接使用group capture 或者用正则进行替换。 不需要split

论坛徽章:
0
5 [报告]
发表于 2009-03-13 11:19 |只看该作者
原帖由 cobrawgl 于 2009-3-13 11:09 发表
$date_old =~ s/(\d{4})(\d{2})(\d{2})/$1-$2-$3/;

谢谢!

不过还是要问一下,我的第一种split后的元素个数为什么是4个,前面的空是怎么产生的,我就只有三个括号啊???

论坛徽章:
0
6 [报告]
发表于 2009-03-13 12:21 |只看该作者
原帖由 DQP 于 2009-3-13 11:16 发表
我来试着解释一下
首先先用个例子来解释一下split 中使用group capture
1.
my $str = 'hello world';
print Dumper split(/(\s)/, $str);

output:

这里可以看到, 我们得到3个元素被\s分开的helloworl ...



是这么个道理
如果分隔模式加了()的话,split还会将捕获的内容返回

论坛徽章:
0
7 [报告]
发表于 2009-03-13 13:39 |只看该作者
现在明白,那个''是split的返回值。

论坛徽章:
0
8 [报告]
发表于 2009-03-16 19:08 |只看该作者
原帖由 DQP 于 2009-3-13 11:16 发表
我来试着解释一下
首先先用个例子来解释一下split 中使用group capture
1.
my $str = 'hello world';
print Dumper split(/(\s)/, $str);

output:

这里可以看到, 我们得到3个元素被\s分开的helloworl ...


请问这里为什么三个引用才返回一个空?还有,为什么返回的空是在最前面返回?而不是中间?
这里split的返回是怎么定义的?

论坛徽章:
0
9 [报告]
发表于 2009-03-16 20:14 |只看该作者
原帖由 hotsnow 于 2009-3-16 19:08 发表


请问这里为什么三个引用才返回一个空?还有,为什么返回的空是在最前面返回?而不是中间?
这里split的返回是怎么定义的?

你可以看一下split的说明:perldoc -f split
里面有很详细的说明

论坛徽章:
0
10 [报告]
发表于 2009-03-16 22:19 |只看该作者

回复 #9 dream3401 的帖子

已经看过来敢回来问的,不过没有看懂。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP