Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在perl中,在匹配行之后获取行_Perl - Fatal编程技术网

在perl中,在匹配行之后获取行

在perl中,在匹配行之后获取行,perl,Perl,如何访问发生模式匹配的行之后的所有行 比如说 BCDA ABCD aaaabbccccddd AAAAA BBBBBB CCC aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa 所以基本上,在模式匹配之后,我想处理它后面

如何访问发生模式匹配的行之后的所有行 比如说

BCDA
ABCD
aaaabbccccddd
AAAAA BBBBBB CCC
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa


所以基本上,在模式匹配之后,我想处理它后面的所有行。将其放入一个数组中。因此,只进行一次模式匹配。

有点不清楚,但这就是你想要的吗

对于此类任务,最理想的方法是:

#!/usr/bin/perl

my @array;

while (<DATA>)  {
  push @array, $_ if /ABCD/ .. 0
}
shift(@array);

print @array;

__DATA__
BCDA
ABCD
AAAABBBBCCCCDDD
AAAAAABBBBBBCCC
AAAAAAAAAAAAAA

这是我能想到的最简单的例子,它听起来像你在寻找什么。 它将匹配的行之后的“所有行”放入一个数组中

my @lines;
while ( <$in> ) { 
    next unless m/ABCD/;
    # in an list context, this will slurp the rest of the file.
    @lines = <$in>;
}
my@行;
而{
下一步,除非m/ABCD/;
#在列表上下文中,这将清除文件的其余部分。
@行=;
}

你能澄清你的问题吗?将什么放入数组?只匹配一次什么图案?所以我想在图案匹配后处理线条。所以在数组中,我想将线条放在ABCD之后。我想在每条线条上循环,然后进行一些比较。为此,我想在匹配图案之后存储所有线条,以便存储它们。我不知道您可以将数据放在Perl代码所在文件的结尾!谢谢Fredrik。是的,这就是我想要的,虽然我不想打印行,而是将其存储在数组中。但是,是的,你说得对,这就是我要找的。你在模式匹配中放置
eof()
有什么想法?最好是
push@array,$\uif/ABCD/。。0
。你也可以直接打印数组:
print@array
@FMc-对于eof()第一部分指责暂时性精神错乱;对于打印部分,这是为了清晰起见,因为我希望OP会对数组中的内容做些什么(更新的答案)。谢谢请注意,如果数据行包含0字符,则在那里使用0可能会导致不幸的行为-可能最好使用undef来代替。+1是为了简单和“我的想法准确”。虽然你应该把正则表达式<代码> /^ ABCD $/< /代码>,或者类似地严格化。那么你上面写的,它也会考虑行ABCD吗?它会在ABCD发现后,将文件中的所有行,而不是ABCD线本身。谢谢,TLP。@kunal,标记行已经被迭代器在while中使用了,所以剩下的就是后面的行,并且将文件迭代器复制到数组中,所有这些行都会发出slurps。@TLP。我还想包括行ABCD…有办法吗?我必须搜索一个特定的字符串,当该字符串出现时,开始处理(存储)该字符串第一次出现时的行
my @lines;
while ( <$in> ) { 
    next unless m/ABCD/;
    # in an list context, this will slurp the rest of the file.
    @lines = <$in>;
}