2012-03-25 2 views
0

Mein Hauptteil des regulären Ausdrucks dieserIn Perl Ich bin eine Protokolldatei mit 2 regulären Ausdrücken Parsen aber die regulären Ausdrücken arbeiten nicht ganz so scheint es

my $filename = "/opt/bmc/ARSystem/AREmail/Logs/emaild.sh_log.1"; 
my $starttag = "A14 FETCH 1"; 
my $endtag = "A14 OK FETCH completed."; 
my $element = ""; 

if(checkFile($filename)) { 
    open (MYFILE, $filename); 
    my @lines = <MYFILE>; 
    close(MYFILE); 
    foreach $line(@lines){ 
     print if /$starttag/../$endtag/; 

     $element .= $line; 
    } 
    #print $element; 
    my @matched = $element =~ /$starttag(.*?)$endtag/mg; 
    #my @matched = $element =~ /$starttag/mg; 
    #my @matched1 = $element =~ /$endtag/mg; 

    print scalar(@matched); 

ist, wenn ich das Skript @matched kommt laufen leer. Mache ich etwas falsch? Ich habe überprüft, dass die Elemente in der Protokolldatei enthalten sind. Sie erstrecken sich über mehrere Linien und alle. Es ruft im Grunde eine E-Mail ab, die sich in der Protokolldatei befindet, wobei das Start-Tag und das End-Tag die E-Mails trennen. Jede Hilfe wäre großartig.

+0

Sollten Sie nicht einen richtigen IMAP-Client verwenden, statt die Protokolle eines zu analysieren? – tripleee

Antwort

3

Da $element erstreckt sich über mehrere Zeilen, sollten Sie den /s Modifikator auf Ihrem regex verwenden . Spiel Zeilenumbrüche zu machen. Die Verwendung des Modifikators /m, wie Sie ihn haben, ändert nur das Verhalten von ^ und $.

Verwandte Themen