再度質問させていただきます。
本当は質問などせずに自力で解決したいのですがなかなかうまくいかなくて困っています…
前回質問させていただいたとき(http://oshiete.goo.ne.jp/qa/7855819.html)には問題なかったのですが、事情がかわってしまい、ifの中の条件を変更しなければならなくなりました。今回はIPアドレスではなく時間抽出です。
以下のメールヘッダに対して、後述するプログラムを実行します。
Received: from ************.jp (**********.jp [158.217.43.2])
by **********.abc.jp ; Wed, 29 Feb 2012 12:17:31
Received: from ************** (localhost [127.0.0.1])
by localhost (Postfix) with SMTP ; Wed, 29 Feb 2012 12:16:23
Received: from **************.jp (***********.jp [158.217.208.11])
by ************.abc.jp ; Wed, 29 Feb 2012 12:15:54 #ここがほしい
Received: from **************.jp (***********.jp [158.217.208.11])
by ************.xyz.jp ; Wed, 29 Feb 2012 12:15:14
From: **************
To: *********@***********abc.jp
Subject: = *****
Date:Wed, 01 Mar 2012 21:06:24 #ここがとれてしまう
.
.
.
本文
~略
$file_data_str = join("", @file_data);
@received_datas = split(/Received:/, $file_data_str);
@received_datas = reverse(@received_datas);
foreach $sorted(@received_datas){
if(($sorted =~ /abc.jp/) and
($sorted =~ /(\w+,\s+\d+\s+\w+\s+\d+\s+\d+:\d+:\d+)/)){
$new_file_name = str2time($1);
$min1 = $new_file_name / 300;
$min1_cut = int( $min1 );
print $min1_cut;
last;
}
}
}
exit;
まず、Received:で区切って、reverseしているのではじめの要素は、元のメールヘッダの最後のReceivedフィールドから本文まであることになります。更にIfで指定してる条件のアドレスがTo:にも出現するのでそこも判定されます。なのでプログラムを実行すると、To:のabc.jpとDateの時間にひっかかってしまい、Dateの時間情報を抽出してしまいます。
あくまで取りたいのはReceivedフィールドの中の時間情報なのですが、何かいいやり方はありませんでしょうか?ちなみに
やり方としては、初めの要素を消す、shiftとか使えるかな、と考えたりもしましたがうまくいかず…、Receivedフィールドのみで判定させたいです。
ご教授願えたらと思います。よろしくお願いします。
A 回答 (1件)
- 最新から表示
- 回答順に表示
No.1
- 回答日時:
Received: で split していますが、Received: 単位で配列に入れたほうが処理は簡単になると思います。
次のような正規表現 (厳密には少し怪しいかも?) を使えば、配列に格納できます。my @received_datas = $file_data_str =~ /(^Received:.+?(?=^[\w\-]+:))/msg;
回答ありがとうございます。
したいことができました。
本当に感謝しています!
いずれは私もここで質問に答える側になってみたいです。
ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PHP PostgreSQLからCSV形式でエクスポートする際にカラム内の改行をとる方法 1 2023/02/22 10:05
- 英語 unconditionalとは? 3 2022/08/26 21:31
- Outlook(アウトルック) 休みが明けてメールをみたらやばいです 3 2022/08/17 09:03
- 英語 正しく意味がとれない 2 2023/06/12 04:43
- 英語 The Twilight Zone1959に関するCBSの回答について 1 2023/03/02 15:13
- CGI perlで書いたcgiでsqliteの使い方を教えてください 2 2023/05/08 21:29
- 英語 英文の添削をしてほしいです。 2 2022/07/12 12:07
- その他(ネットショッピング・通販・ECサイト) 国際便の局留めについて 1 2022/03/31 15:48
- その他(メールソフト・メールサービス) 【大至急】メールが送付できているか分かりません 1 2023/08/26 08:05
- C言語・C++・C# プログラミングの問題です。至急教えてください。 /***から***/の部分をプログラミングにしてほし 1 2022/10/13 11:48
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
HTMLのフォームで画像と文...
-
ファイル全てを .xlsm に変更し...
-
perl ファイルが開かない
-
Perl の「stringify」の意味に...
-
ファイルの存在の有無を確かめ...
-
python renameについて
-
window.open でのファイル指定方法
-
batファイルでrenameができませ...
-
エラー 'dir.h' : No such fi...
-
ExcelをCSV書き出す場合のシー...
-
awkスクリプトでダブルクォーテ...
-
Perlの変数に文字数制限(容量...
-
readdir()で得られるファイル・...
-
while(<ハンドラ>) {} で行数を...
-
パスから最後のディレクトリだ...
-
テキストデータから指定した1...
-
一定時間が経過したフォルダの削除
-
htaccessで特定のディレクトリ...
-
ReadLineでの読み出し行を指定する
-
1行がやたら長いテキストをバッ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
window.open でのファイル指定方法
-
csvファイルの横方向への改行に...
-
python renameについて
-
VBAコードを張り付け後のエクセ...
-
ファイルの存在の有無を確かめ...
-
行を指定して削除する方法PERL
-
VBA テキストファイルを読み取...
-
ファイル全てを .xlsm に変更し...
-
Firefox で file:// で始まる U...
-
fgets で値が取得できない
-
perl ファイルが開かない
-
MATLABのm-fileについて
-
Perl の「stringify」の意味に...
-
PerlでのUseless use...
-
JSP URLに表示される拡張子 .jsp
-
巨大なテキストの最終行を取得...
-
複数ファイルを1つにするシェ...
-
drtファイルはどうしたら開...
-
fopen64について
-
perlで画像をダウンロードしよ...
おすすめ情報