0

我正在尝试使用 perl 中的正则表达式将从“1. Virtualization”开始的值 grep 到“2.Virtualization”。1.Virutalization 和 2.Virtualization 之间有很多数据在一个数组中。

我的数组内容示例如下所示。
"1. 虚拟化容量管理 因性能不佳而导致的事件数量 0 999 10 5 4 容量计划的生产成本 10K 100K 80K 30K 10K 计划外购买容量的数量 0 999 15 10 5 2.虚拟化财务管理 事件数量由于性能不佳 0 999 10 5 4 产能计划的生产成本 10K 100K 80K 30K 10K"

我如何编写一个受控循环,它 grep 值介于 1 和 2 之间。在 1 和 2 之间,它甚至应该 grep 数据“容量计划 10K 100K 80K 30K 10K 的生产成本”并放在一个阵列位置。

我尝试编写一些代码无法理解如何编写受控循环。任何人都可以帮我解决这个问题。

foreach (@array) { 
    if ($_ =~ /\d+\.\s+Virtualization.*/) { #greps values starting in 1. Virtualizaton
         push (@node_level1, "$_");         #stores in the node_level1
    } elsif ($_ =~ /(\%\s+.*)/) {  #greps values beginning with % Number of Nodes 
       # print "$_\n";
    }
}

提前致谢。

4

2 回答 2

1

perl 中有一个自动操作符来做与 perreal 的答案相同的事情,即触发器操作符

foreach (@array) { 
    if (/1.\s+Virtualization/../2.\s+Virtualization/) {
       push (@node_level1, $_);
    }
}
于 2012-12-10T03:18:44.820 回答
0

使用状态持有者:

my $state = 0;

foreach (@array) { 
    if ($_ =~ /1.\s+Virtualization/) {
         $state = 1;
    } elsif (($state == 1) and ($_ =~ /2.\s+Virtualization/)) {
       $state = 0;
    } elsif ($state == 1) {
       push (@node_level1, $_);         #stores in the node_level1
    }
}
于 2012-12-10T00:04:57.487 回答