免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
123
最近访问板块 发新帖
楼主: grshrd49
打印 上一主题 下一主题

有取舍的split [复制链接]

论坛徽章:
1
天蝎座
日期:2014-02-28 16:08:53
21 [报告]
发表于 2013-09-18 14:59 |只看该作者
回复 16# inchonline


    .vim.tar.gz (2.55 MB, 下载次数: 19)

论坛徽章:
0
22 [报告]
发表于 2013-09-18 23:28 |只看该作者
谢谢啦!回复 21# snriyt


   

论坛徽章:
0
23 [报告]
发表于 2013-09-19 12:36 |只看该作者
flw 发表于 2013-09-15 12:45
给你们介绍个好玩的

我喜欢这个模块~谢谢

论坛徽章:
0
24 [报告]
发表于 2013-09-19 15:21 |只看该作者
仅针对该题,我的想法如下:
  1. my $s = 'a,b,c,d,e,[e1,e2,[e21,e22,e33],e3],f';

  2. my $s =~ /^(.+?)(\[.+\]),(.+)/; #非贪婪模式匹配第一个[,贪婪模式匹配最后一个]

  3. my @a = split /,/, $1;
  4. push @a, $2;
  5. push @a, split /,/, $3;
复制代码

论坛徽章:
1
金牛座
日期:2013-09-06 08:50:31
25 [报告]
发表于 2013-09-19 19:17 |只看该作者
不错,挺好的。

求职 : 软件工程师
论坛徽章:
3
程序设计版块每日发帖之星
日期:2015-10-07 06:20:00程序设计版块每日发帖之星
日期:2015-12-13 06:20:00程序设计版块每日发帖之星
日期:2016-05-05 06:20:00
26 [报告]
发表于 2013-09-19 19:29 |只看该作者
回复 17# rubyish


    这个问题确实很复杂,将一个复杂的问题拆分成几个简单点的问题,就简单多了。

论坛徽章:
7
戌狗
日期:2013-12-15 20:43:38技术图书徽章
日期:2014-03-05 01:33:12技术图书徽章
日期:2014-03-15 20:31:17未羊
日期:2014-03-25 23:48:20丑牛
日期:2014-04-07 22:37:44巳蛇
日期:2014-04-11 21:58:0915-16赛季CBA联赛之青岛
日期:2016-03-17 20:36:13
27 [报告]
发表于 2013-09-19 20:18 |只看该作者
回复 26# 104359176

大牛,你说得对
这个问题确实很复杂,我的直觉 RE 可以,
but 我学艺不精,
我的老师们:
jason680, kk861123, MCshell, perlvim, yinyuemi, zhiong8
必有简单的解决方案。.......这个问题我一直在纠结.......
   

论坛徽章:
3
摩羯座
日期:2013-09-04 12:01:36申猴
日期:2013-10-23 12:12:23CU十二周年纪念徽章
日期:2013-10-24 15:41:34
28 [报告]
发表于 2013-09-20 18:16 |只看该作者
回复 27# rubyish


我其实最近在写接口的测试脚本, 全部返回信息是json数组, 所以就一直在想perl是如何处理json的
虽然我们可以用 use JSON;可以解决 json的问题, 但是我好奇他们是则么处理额...

论坛徽章:
0
29 [报告]
发表于 2013-09-21 12:22 |只看该作者
本帖最后由 kk861123 于 2013-09-21 12:24 编辑

回复 27# rubyish


    哥们,不要搞的每次都这么纠结的,搞的俺也挺纠结的,这是我解析的code
  1. #!/usr/bin/perl -w
  2. use strict;
  3. use Data::Dumper;

  4. my $str = q{a,b,c,d,e,[e1,e2,[e21,e22,e33],e3],f};

  5. my @stacks = ([]);
  6. my $stack  = $stacks[-1];
  7. foreach my $field ( split /,/ => $str ) {
  8.     if ( $field =~ m/\[(.*)/) {
  9.         push @stacks, [$1];
  10.         $stack = $stacks[-1];
  11.     }
  12.     elsif ($field =~ /(.*)\]/) {
  13.         my $last_stack = pop @stacks;
  14.         push @$last_stack, $1;
  15.         $stack = $stacks[-1];
  16.         push @$stack, $last_stack;
  17.     }
  18.     else {
  19.         push @$stack, $field;
  20.     }
  21. }

  22. print Dumper $stacks[0];

复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP