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客户端吗比解析一个的日志更好?