В Perl я анализирую файл журнала с 2 регулярными выражениями, но, кажется, регулярные выражения не совсем работают - PullRequest
0 голосов
/ 25 марта 2012

Моя основная часть регулярного выражения - это

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

Когда я запускаю скрипт, @matched появляется пустым. Я делаю что-то неправильно? Я проверил элементы в файле журнала. Они охватывают несколько строк и все. Это в основном получение электронной почты, которая находится в файле журнала, теги starttag и end разделяют электронные письма. Любая помощь будет великолепна.

1 Ответ

3 голосов
/ 25 марта 2012

Поскольку $element занимает несколько строк, вы должны использовать модификатор /s в своем регулярном выражении, чтобы . соответствовал символам новой строки.Использование модификатора /m, как у вас, изменяет только поведение ^ и $.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...