Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 在perl中,我用2个正则表达式解析一个日志文件,但正则表达式似乎不太有效_Regex_Perl - Fatal编程技术网

Regex 在perl中,我用2个正则表达式解析一个日志文件,但正则表达式似乎不太有效

Regex 在perl中,我用2个正则表达式解析一个日志文件,但正则表达式似乎不太有效,regex,perl,Regex,Perl,正则表达式的主要部分是 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&

正则表达式的主要部分是

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);
my$filename=“/opt/bmc/ARSystem/AREmail/Logs/emaild.sh_log.1”;
我的$starttag=“A14获取1”;
my$endtag=“A14确定获取已完成。”;
我的$element=“”;
if(检查文件($filename)){
打开(MYFILE,$filename);
我的@lines=;
关闭(MYFILE);
foreach$行(@行){
打印if/$starttag/./$endtag/;
$element.=$line;
}
#打印$element;
my@matched=$element=~/$starttag(.*?)$endtag/mg;
#my@matched=$element=~/$starttag/mg;
#my@matched1=$element=~/$endtag/mg;
打印标量(@匹配);
当我运行脚本时,@matched显示为空。我是否做错了什么?我已经验证了日志文件中的元素。它们跨越多行和所有行。它基本上是检索日志文件中的电子邮件,starttag和end标记将电子邮件分开。
任何帮助都会很好。

由于
$element
跨越多行,您应该在正则表达式上使用
/s
修饰符使
匹配新行。使用
/m
修饰符,正如您所做的那样,只会改变
^
$
的行为,因为
$element
跨越多行s、 您应该在正则表达式上使用
/s
修饰符使
匹配换行符。使用
/m
修饰符,正如您所做的那样,只会改变
^
$

的行为。您不应该使用正确的IMAP客户端而不是解析一个客户端的日志吗?您不应该使用正确的IMAP客户端吗比解析一个的日志更好?