2009-06-12 36 views
1

我的正則表達式技巧是...糟糕。我有這個電子郵件正文。如何從此電子郵件中提取嵌入的附件名稱?

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 

如何更改此正則表達式,使其適用於電子郵件正文中的任何嵌入式文件?

回答

0

嘗試:

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

編輯:原帖有一個bug - 道歉!我試圖以不正確的方式來縮短貪婪。

+0

不行的遺憾。 – 2009-06-12 13:58:26

+0

糟糕 - 我的錯誤。更正後的版本位於編輯更新中。現在工作。 – 2009-06-12 14:15:12

0

請注意,如果你擁有了整個電子郵件(頭和所有)你將通過從電子郵件標題中提取文件名而不是正文(其格式嚴重依賴於電子郵件在到達您之前所經過的郵件軟件鏈)來獲得更一致的結果。

在MIME閱讀起來,多消息和MIME頭,看看如何做到這一點:http://en.wikipedia.org/wiki/Multipart_message#MIME_headers

相關問題