2017-04-26 41 views
-1

Ich bin sehr neu in Perl.Auswählen eines Wertes zum Deklarieren in Perl

Lassen Sie sagen, die Ausgabe von Befehl wie unten sein würde,

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

Ich plane Abschnitt speichern Wert unter QUEUE, die der Wert ‚DATATYPE‘ Wort enthält und nicht auf ‚KOMMENTAR‘ Wort enthält, würde der Wunsch Ausgang sein,

SYSTEM.DATATYPE.REQUEST.QUEUE

Mein Code wie folgt,

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

     print "$QName1 \n"; 
} 

Der obige Code ist jedoch fehlgeschlagen.

Vor dem oben genannten Code, versuche ich mit einer einzigen Zeile zu erklären, aber keinen Erfolg.

Antwort

0

Sie können dies versuchen:

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

Regex Demo

Beispielcode: (Run it here)

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