【问题标题】:selecting a value to declare in perl选择要在 perl 中声明的值
【发布时间】:2017-04-26 04:43:12
【问题描述】:

我对 Perl 很陌生。

假设命令的输出如下所示,

AMQ8409: Display Queue details.
   QUEUE(SYSTEM.DATATYPE.REPLY.QUEUE)      TYPE(QLOCAL)
   ACCTQ(QMGR)                             ALTDATE(2016-08-01)
   ALTTIME(18.33.20)                       BOQNAME( )

AMQ8409: Display Queue details.
   QUEUE(SYSTEM.DATATYPE.REQUEST.QUEUE)    TYPE(QLOCAL)
   ACCTQ(QMGR)                             ALTDATE(2016-08-01)
   ALTTIME(18.32.37)                       BOQNAME( )

AMQ8409: Display Queue details.
   QUEUE(SYSTEM.MESSAGE.ASSOCIATION.QUEUE)
   TYPE(QLOCAL)                            ACCTQ(QMGR)
   ALTDATE(2016-08-01)                     ALTTIME(18.32.37)

AMQ8409: Display Queue details.
   QUEUE(SYSTEM.PENDING.DATATYPE.REPLY)        TYPE(QLOCAL)
   ACCTQ(QMGR)                             ALTDATE(2016-08-01)
   ALTTIME(18.33.20)                       BOQNAME( )

我打算将值存储在 QUEUE 部分下,该值包含“DATATYPE”字而不包含“REPLY”字,期望输出是,

SYSTEM.DATATYPE.REQUEST.QUEUE

我的代码如下,

while (<OPEN_FILE>) {
      my ($QName1) = /QUEUE\(([^()]+)\)/;
      my ($QName1) = $QName1 =~ m/DATATYPE/ && $QName1 !~ m/RETRY/;

      print "$QName1 \n";
}

但是,上面的代码失败了。

在上面的代码之前,我尝试使用一行来声明,但根本没有成功。

【问题讨论】:

    标签: regex perl


    【解决方案1】:

    你可以试试这个:

    ^\s*QUEUE\(\K(?=.*DATATYPE)(?!.*REPLY)[^\)]*
    

    Regex Demo

    示例代码:(Run it here)

    my $regex = qr/^\s*QUEUE\(\K(?=.*DATATYPE)(?!.*REPLY)[^\)]*/mp;     
    if ($yourstring =~ /$regex/g ) {
      print ${^MATCH};
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-05-28
      • 1970-01-01
      • 2020-08-06
      • 2012-08-02
      • 1970-01-01
      • 1970-01-01
      • 2013-12-29
      相关资源
      最近更新 更多