[英]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.