【问题标题】:Perl Flip-flop operator - Is it possible to treat the END of first match as START of next match?Perl 触发器运算符 - 是否可以将第一场比赛的结束视为下一场比赛的开始?
【发布时间】:2012-01-04 21:44:39
【问题描述】:

在触发器运算符方面需要更多帮助 以下是我的示例数据:

LS             SPID     ASP            SPID
3-59           MGW05    
SLC ACL PARMG ST                   SDL                             SLI
 0  A1  17    C7STH-1&&-31         MSC19-0/RTLTB2-385
LS             SPID     ASP            SPID
3-618          ETRC18   
SLC ACL PARMG ST                   SDL                             SLI
 0  A2   0    C7ST2C-4             ETRC18-0/RTLTB2-417
 1  A2   0    C7ST2C-5             ETRC18-0/RTLTB2-449
END

我感兴趣的数据从字符串“LS SPID ASP SPID”开始,到下一个“LS SPID ASP SPID”或END(如果没有下一个LS 行)结束。是否可以使用触发器运算符来获得这个? 我将这些数据读入一个数组(@linesread),然后尝试使用下面的代码遍历数组,但它不起作用。问题是因为我不能在同一条线上循环两次吗?还有其他解决方案吗?

P.S:我根据需要使用 ... 运算符。

foreach (@linesread) {
    if (/^LS\s*SPID\s*ASP\s*SPID$/ ... (/^LS\s*SPID\s*ASP\s*SPID$/ || /^END$/)) {
    print "$. \t $_\n";
    }
}   

【问题讨论】:

    标签: perl flip-flop


    【解决方案1】:

    范围运算符本身无法配置为立即计算左侧。不过你可以试试

    if (my $r = /^LS\s*SPID\s*ASP\s*SPID$/ ... (/^LS\s*SPID\s*ASP\s*SPID$/ || /^END$/)) {
        print "$. \t $_\n";
        redo if $r =~ /E0$/;
    }
    

    【讨论】:

    • 非常感谢您的快速回复。我读到这个特殊序列 E0 被附加到返回的值,但无法想象使用它来解决我的问题。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2012-03-27
    • 2022-11-23
    • 1970-01-01
    • 2015-09-16
    • 1970-01-01
    • 1970-01-01
    • 2021-08-24
    • 2016-01-29
    相关资源
    最近更新 更多