免费注册 查看新帖 |

Chinaunix

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

有取舍的split [复制链接]

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


    my $times;

    while ($times) {
        $times = $text =~ s/[ ([^\]]+) ]/'<' . replace_comma($1) . '>'/xmsge;
    }

    sub replace_comma {
         my $str = shift;
         $str =~ s/,/_comma_/g;
         return $str;
    }

论坛徽章:
0
12 [报告]
发表于 2013-09-17 16:50 |只看该作者
回复 2# rubyish


    为什么你得帖子都是纠结了。。痛苦。。一晚

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


    应为他这一个晚上都很纠结 , 而不是应为这个帖子 啊哈哈哈哈哈

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


    这个替换是不是只能替换两层[] ?
哪如何是再多几层括号讷

论坛徽章:
0
15 [报告]
发表于 2013-09-17 21:49 |只看该作者
回复 4# snriyt

请问你的VI配置文件是怎么的啊,可否共享


   

论坛徽章:
0
16 [报告]
发表于 2013-09-17 21:50 |只看该作者
回复 4# snriyt
请问你的VI配置文件是怎么样的啊,可否共享

论坛徽章:
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
17 [报告]
发表于 2013-09-18 04:27 |只看该作者
回复 12# onepublic


    这问题我纠结了一下午,一直在纠结

论坛徽章:
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
18 [报告]
发表于 2013-09-18 04:30 |只看该作者
回复 13# grshrd49


    北极熊好 Q 啊。。

求职 : 软件工程师
论坛徽章:
3
程序设计版块每日发帖之星
日期:2015-10-07 06:20:00程序设计版块每日发帖之星
日期:2015-12-13 06:20:00程序设计版块每日发帖之星
日期:2016-05-05 06:20:00
19 [报告]
发表于 2013-09-18 08:39 |只看该作者
回复 14# grshrd49
对层数没有限制。代码没有测试,思路就是每次替换掉一层,将边界字符也替换掉。然后再次替换,直到找不到可以替换的。

   

论坛徽章:
0
20 [报告]
发表于 2013-09-18 11:22 |只看该作者
本帖最后由 onepublic 于 2013-09-18 17:04 编辑

这个就是堆栈和出栈的原理
  1. use strict;
  2. use warnings;
  3. use Data::Dumper;

  4. #stack op; show as Data::Dumper;
  5. my $str= 'a,b,c,d,e,[e1,e2,[e21,e22,[e111,e222,e333],e33],e3],f';

  6. my @stack;
  7. my @array = split(/,/,$str);

  8. push @stack,[];

  9. for (@array){
  10.     if (m/\[/){
  11.         s/\[//g;
  12.         my $ref = [];
  13.         push @{$stack[-1]},$ref; ##build struct
  14.         push @stack,$ref ;       #push stack
  15.         push @{$stack[-1]},$_;
  16.     }elsif (m/\]$/){
  17.         s/\]//g;
  18.         push @{$stack[-1]},$_;
  19.         pop @stack;
  20.     }else{
  21.         push @{$stack[-1]},$_;
  22.     }

  23. }
  24. print Dumper \@stack;
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP