如何在perl中使用受控循环来使用regexp

时间:2012-12-09 23:36:17

标签: regex perl

我正在尝试使用perl中的正则表达式将从“1. Virtualization”开始的值更改为“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“

如何编写一个可控制的循环,其值介于1和2之间。在1到2之间,它甚至应该将数据“容量计划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";
    }
}

提前致谢。

2 个答案:

答案 0 :(得分:1)

在perl中有一个自动操作符可以执行与perreal的答案相同的操作,flip-flop operator

foreach (@array) { 
    if (/1.\s+Virtualization/../2.\s+Virtualization/) {
       push (@node_level1, $_);
    }
}

答案 1 :(得分: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
    }
}