regex - 检查当前行和下一行中的模式时的 Perl 循环问题

标签 regex perl while-loop

我有一个类似这样的文件

1 XXXX jimmy XXXXX XXXXX
2 XXXX johny XXXXX XXXXX
3 XXXX jimmy XXXXX XXXXX
4 XXXX jimmy XXXXX XXXXX
5 XXXX johny XXXXX XXXXX

仅当当前行有 jimmy 且连续行有 johny 时,我才想循环遍历文件并打印行

我已经编写了代码来检查下一行是否当前行与模式匹配,但编码并未循环遍历每一行,例如我得到的

上述文件的输出为

1 XXXX jimmy XXXXX XXXXX
2 XXXX johny XXXXX XXXXX

以下是我的代码的一部分

while($line=<ABC>){
    $c1=(split (/\s+/, $line))[1];
    if($c1 eq 'jimmy'){
        $i=0;
        while ($i<1){
            $line2 = <ABC> ;
            $i++;
            $c12=(split (/\s+/, $line2))[1];
            if($c12 eq 'johny') {
                print $line."\n".$line2."\n";
            }

最佳答案

#!/usr/bin/perl
use strict;
use warnings;
my $ln;
while(my $line = <DATA>){
    if($ln && $ln =~ /jimmy/ && $line =~ /johny/){
        #print whatever you need to
        print "ln is: $ln line is $line";
    }
    $ln = $line;
}
__DATA__
1 XXXX jimmy XXXXX XXXXX
2 XXXX johny XXXXX XXXXX
3 XXXX jimmy XXXXX XXXXX
4 XXXX jimmy XXXXX XXXXX
5 XXXX johny XXXXX XXXXX

Demo

关于regex - 检查当前行和下一行中的模式时的 Perl 循环问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27357017/

相关文章:

regex - 如何在 coffeescript heregex 中设置修饰符?

php - 有没有办法避免最后出现空的 else { }?

java - 为什么当我尝试更改此 case 语句中的变量时,它不会更改该循环之外的变量

Java while 循环在与 scan.nextLine() 交互后终止;方法

Java 正则表达式(无空格或 0-9)

java - 从字符串中提取单词的正则表达式

regex - 在 bash 中使用两次捕获来解析字符串

python - 使用 urlencode、urlopen 上传文件 - 除非之后调用 post.read(),否则文本会被截断?

windows - 如何在Windows 10中的perl> = 5.18中强制为输出文件设置代码集cp1252?

perl - Perl的print如何默认添加换行符?