2009-06-12 8 views
1

私のregexスキルは...悪いです。私はこのメール本文を持っています。このメールから埋め込み添付ファイル名を抽出するにはどうすればよいですか?

Hello World 

[cid:[email protected]] 

Hello World 

[cid:[email protected]] [cid:[email protected]] 

Hello World 

私が必要とするのは、ファイル名の配列です。

preg_match_all("/\[cid:(.*)\@/", $string, $matches); 

echo "<pre>"; 
    print_r($matches); 
echo "</pre>"; 

そして、最初のファイル名が正しく表示されます。しかし、第二と第三ではない。

[0] => image002.png 
[1] => [email protected]] [cid:image002.png 

この正規表現を電子メール本文の任意の埋め込みファイルで使用できるように変更するにはどうすればよいですか?

答えて

5

私はあなただけでこれを表現変更することができると思う。試合は貪欲でないようにするには

"/\[cid:(.*?)\@/" 

を。ここで

はあなたの表現をテストするために使用できるツールのカップルです:

+0

作品ありがとうございます。 –

+0

より明示的に:/ \ [cid:[^ \] @] */" – Tomalak

+0

Tomalak - [^ \]の代わりに[^ @]でなければならない - ファイル名に '\' 。 –

0

試してみてください。

preg_match_all("/\[cid:([^@]*)/", $string, $matches); 

EDIT:オリジナルのポストはバグがありました - 謝罪!私は間違った方法で貪欲を短絡しようとしていました。

+0

は申し訳ありません動作しません:

はこれを行う方法を確認するためにMIMEマルチパートメッセージやMIMEヘッダ上に読んでください。 –

+0

私の間違い。訂正されたバージョンは編集更新にあります。今すぐ動作します。 –

0

あなたは電子メール全体(ヘッダとすべてを)持っている場合ことに注意してください、あなたは本文ではなく電子メールヘッダーからファイル名を抽出することで、より一貫した結果を得ることができます(電子メールがあなたに届くまでに通過したメールソフトウェアの連鎖に大きく依存しています)。 http://en.wikipedia.org/wiki/Multipart_message#MIME_headers

+0

私は電子メールパーサを持っています。私がしたいことは、システム内の物理イメージへのリンクを使ってHTMLを作成することです。 –