繁体   English   中英

如何检查字符串是否与perl中的正则表达式匹配?

[英]How to check if string matches a regular expression in perl?

我对perl有问题。 我想解析电子邮件对象或记录或归档任何内容。 我想找到邮件的来源。 首先,我必须检查“ x-envelop-from”行,如果不匹配,则必须检查“ from”行。

这是我的一些示例文件:

X-Envelope-From: 
    <kamil@yahoo.com>
From: "=?iso-8859-9?B?RXYgVGH+/W1hY/1s/fD9bmRhIsdfyhjdbmRRmltIFNlem9u?=
    =?iso-8859-9?B?dQ==?=" <kamil@yahoo.com>

我的代码为此文件打印了两行:

kamil@yahoo.com
kamil@yahoo.com

是可能的,两条印刷线都印刷在if和elsif中? 检查比赛有问题吗?

while ( $line = <FILE>) 
{
    my ($from, $to, $spam_id, $date, $tmp_date, $m_day, $m_mon, $m_year, $m_hour, $m_min, $pos_tmp);
    my ($subject);
# 
    if ( $line =~ m/^(X-Envelope-From:).*/ ) {
        if ( $line =~ m/^X-Envelope-From:.*<(.*)>.*/ ) {
            $from = $1;
        }
        else {
            $line = <FILE>;
            if ( $line =~ m/.*<(.*)>.*/ ) {
                $from = $1;
            }
        }
        print $from . "\n";
    }

    elsif ( $line =~ m/^(From:).*/ ) {
        if ( $line =~ m/^From:.*<(.*)>.*/ ) {
            $from = $1;
        }
        else {
            $line = <FILE>;
            if ( $line =~ m/.*<(.*)>.*/ ) {
                $from = $1;
            }
        }
        print $from . "\n";
    }
}

提前致谢。

使用诸如Email::MIME类的专用模块来解析标头:

#!/usr/bin/env perl

use strict;
use warnings;

use Email::MIME;

my $em = Email::MIME->new(
    do { local $/; <DATA> }
);

my $from = $em->header('X-Envelope-From');
$from = $em->header('From') unless $from;

$from =~ s{.*<|>.*}{}g;
print $from;

__DATA__
X-Envelope-From: 
    <kamil@yahoo.com>
From: "=?iso-8859-9?B?RXYgVGH+/W1hY/1s/fD9bmRhIsdfyhjdbmRRmltIFNlem9u?=
    =?iso-8859-9?B?dQ==?=" <kamil@yahoo.com>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM