2017-04-26 9 views
-1

私はPerlを初めて使っています。perlで宣言する値を選択する

レッツ願望出力は希望、私は値が 'REPLYという言葉が含まれている「DATATYPEという言葉が含まれておりませんQUEUEセクションの下に値を格納する予定

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() 

、コマンドからの出力は以下のようになると言います

、続くとして、

SYSTEM.DATATYPE.REQUEST.QUEUE

私のコードで3210

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

     print "$QName1 \n"; 
} 

ただし、上記のコードは失敗しました。

上記のコードの前に、私は1行で宣言しようとしましたが、成功しません。

答えて

0

あなたはこれを試すことができます。

^\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}; 
} 
関連する問題