Perl在输入中匹配下一个

时间:2015-11-08 21:09:31

标签: regex perl

我有一个Perl脚本通过这样的输入:

while ( <INPUT> ) {
    if (condition) {
        # match a string 3 lines down from current line
    }
}

如何在输入中跳过行并基本上“找到下一个匹配的行?”

3 个答案:

答案 0 :(得分:3)

您可能想要从同一个文件句柄中读取,并跳到第三行,

while ( <INPUT> ) {
    if (condition) {
        # match a string 3 lines down from current line
        <INPUT> for 1..2;
        $_ = <INPUT> // last; # eof?
    }
}

答案 1 :(得分:1)

我通常会为这类问题维护状态变量:

my $condition_last_met;

while ( <INPUT> ) {
    if (condition) {
        $condition_last_met = $.;
    }
    if (defined($condition_last_met) && $condition_last_met + 3 == $.)
    {
        # search the string in the current line
    }
}

此示例假设您从未匹配上一场比赛中3行内的条件,但可以采用相同的方式处理。

答案 2 :(得分:0)

通常设置一个标志并保持计数以获得匹配字符串的特定行。比赛结束后清除。

my $conditon_flag = 0;
my $count = 0;
while (<input>)
{
     if(condition)
     {
          $condition_flag = 1;
          $count++;
     }

     if($condition_flag == 1 && $count == 3)
     {
           #match the string;
           $condition_flag = 0;
           $count = 0;
     }
}