0

現在、一致するパターンから3行目を取得しています。この場合q33BDrP9007220、一致するパターンで3行目が印刷されますが、4行目と5行目のパターンが3行目のパターンと一致する場合に限り、4行目と5行目も印刷したいと思います。これらの3つのメールIDを1行に印刷します。 '、'で区切られます。

open (MYFILE,<$mailqdir);
while(<MYFILE>)
if(/(\w{14})/){
next unless \w{14})/ % 2;
$temp = scalar <MYFILE>;
$rf_id = $temp;
}

- - - - - - - 入力 - - - - - - - - -

q33BDrP9007220    50153 Tue Apr  3 16:43 <mohitnegi@yahoo.com>
                 (Deferred: 451 4.2.1 mailbox temporarily disabled: paond.tndt)
                                         <tarunsharma@yahoo.com>
                                         <tararma@yahoo.com>
                                         <tarsharma@yahoo.com>
q33BDrP9007220    50153 Tue Apr  3 16:43 <mohitnegi@yahoo.com>
                 (Deferred: 451 4.2.1 mailbox temporarily disabled: paond.tndt)
                                         <tnsharma@yahoo.com>
                                         <tama@yahoo.com>
                                         <harma@yahoo.com>
q33BDrP9007220    50153 Tue Apr  3 16:43 <mohitnegi@yahoo.com>
             (Deferred: 451 4.2.1 mailbox temporarily disabled: paond.tndt)
                                     <tarunrma@yahoo.com>
                                     <taarma@yahoo.com>
                                     <tsharma@yahoo.com>
4

3 に答える 3

1

この例はあなたを助けるかもしれません:

#!/usr/bin/perl

use warnings;
use strict;

my @emails;
while (<DATA>) {
    if (/^\w{14}\s/) {
        <DATA>;              # skip one line
        output(@emails);
        undef @emails;       # forget emails
    } elsif (/^\s+<([^>]+)>$/) {
        push @emails, $1;    # remember the email
    }
}

# Print the last rememberd emails
output(@emails);

sub output {
    print join(',', @_), "\n" if @_;
}

__DATA__
q33BDrP9007220    50153 Tue Apr  3 16:43 <mohitnegi@yahoo.com>
                 (Deferred: 451 4.2.1 mailbox temporarily disabled: paond.tndt)
                                         <tarunsharma@yahoo.com>
                                         <tararma@yahoo.com>
                                         <tarsharma@yahoo.com>
q33BDrP9007220    50153 Tue Apr  3 16:43 <mohitnegi@yahoo.com>
                 (Deferred: 451 4.2.1 mailbox temporarily disabled: paond.tndt)
                                         <tnsharma@yahoo.com>
                                         <tama@yahoo.com>
                                         <harma@yahoo.com>
q33BDrP9007220    50153 Tue Apr  3 16:43 <mohitnegi@yahoo.com>
             (Deferred: 451 4.2.1 mailbox temporarily disabled: paond.tndt)
                                     <tarunrma@yahoo.com>
                                     <taarma@yahoo.com>
                                     <tsharma@yahoo.com>

また、 StackOverflowでファイルperlの解析を読んでください-同僚やクラスメートによって投稿された可能性がありますか?

于 2012-06-07T10:14:00.407 に答える
0

私はあなたの質問を完全に理解したかどうかはわかりませんが、それでもショットを撮ります。

whileループ内で、最初の正規表現の後、メールアドレスを変数に格納します。たとえばmy $addressList = $1;、一時変数myを設定します$temp = 1;。後で行うことができif ($temp)、次の行が正規表現と一致する場合は、マーカー(q33BDrP9007220)がヒットするまで$addressList変数に追加し続けます。

HTH

于 2012-06-07T08:14:47.863 に答える
0

これが私が行く方法です

use strict;
use warnings;

my $file="input_file.txt";

open (FILE,"<$file") or die "Can't open $file: $!";

my $contents = do { local $/; <FILE> };

my @arr=split('q33BDrP9007220', $contents);

foreach my $ele(@arr)
{

    $ele =~ s/([a-zA-Z0-9_.]+@[a-zA-Z]+\.[a-zA-Z]{2,4})//;

    $ele =~ s/.*?([a-zA-Z0-9_.]+@[a-zA-Z]+\.[a-zA-Z]{2,4})/$1 ,/sg;

    print $ele;

}

メールアドレスの正規表現([a-zA-Z0-9_.]+@[a-zA-Z]+\.[a-zA-Z]{2,4})は自分で変更できます。

于 2012-06-08T07:05:20.643 に答える