免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1740 | 回复: 9

请教:如何匹配跨行字符串,并找出最大数? [复制链接]

论坛徽章:
0
发表于 2013-05-28 17:26 |显示全部楼层
#!/usr/bin/perl
#use 5.016;
use strict;
use warnings;

my $run_config = "Standard IP access list 10
10 permit 10.10.10.0,wildcard bits 0.0.0.255
Standard IP access list 11
10 permit 10.10.10.0,wildcard bits 0.0.0.255
Standard IP access list 2301
10 permit 10.10.10.0,wildcard bits 0.0.0.255
Standard IP access list 96
10 permit ip 10.10.11.0 0.0.0.255 any
Standard IP access list 110
10 permit ip 10.10.11.0 0.0.0.255 any
Standard IP access list 2351
10 permit ip 10.10.11.0 0.0.0.255 any";
my (@st,@ex,@Standard,@Extended);   
if($run_config =~ /Standard\s+IP\s+access\s+list\s+(\d+)/smg){
           if($1>=1 && $1<=99) {
               push @st,$1;
             }
        }
@Standard= sort {$b <=> $a} @st;
print $Standard[0]+1;
我想得到的结果是97,但运行总显示11,说明只匹配了第一行的10,然后加1输出的,我的程序错在哪里?怎么才能逐行匹配呢?感谢各位帮助!

论坛徽章:
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
发表于 2013-05-28 17:49 |显示全部楼层
本帖最后由 rubyish 于 2013-05-28 14:02 编辑

:
  1. my @st = grep { $_ >= 1 && $_ <= 99 } map /list\s+(\d+)/g, $run_config;
  2. my ( $wanted ) = sort { $b <=> $a } @st;
  3. say $wanted + 1;
复制代码

论坛徽章:
0
发表于 2013-05-28 18:02 |显示全部楼层
回复 2# 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
发表于 2013-05-28 18:13 |显示全部楼层
错在:
  1. for ( $run_config =~ /list\s+(\d+)/g ) {
  2.     if ( $_ >= 1 && $_ <= 99 ) {
  3.         push @st, $_;
  4.     }
  5. }
复制代码

论坛徽章:
0
发表于 2013-05-28 20:43 |显示全部楼层
  1. @match = ($run_config =~ m/\blist\s+(\d+)/g);
  2. @under_100 = grep { $_ >= 1 && $_ <= 99 } @match;
  3. @max = sort { $a <=> $b } @under_100;
  4. print $max[-1]+1;
复制代码

论坛徽章:
0
发表于 2013-05-28 23:20 |显示全部楼层
回复 5# lhohoz

写得很清楚,感谢你的无私帮助!
   

论坛徽章:
0
发表于 2013-05-29 10:34 |显示全部楼层
回复 4# 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
发表于 2013-05-31 12:07 |显示全部楼层
kangwenyi 发表于 2013-05-29 06:34
回复 4# rubyish
里面这$_怎么解释,为什么会是数字呢

(\d+) 就是数字

论坛徽章:
0
发表于 2013-05-31 16:24 |显示全部楼层
回复 8# rubyish
我的意思是为什么不是/list\s+(\d+)/ 而只是(\d+)呢

论坛徽章:
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
发表于 2013-06-03 20:33 |显示全部楼层
回复 9# kangwenyi


    return $1
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP