正则表达式从php imap

时间:2015-09-23 17:12:16

标签: php regex base64

我有下面的sting,它是一个电子邮件正文,我想在PHP中只从中提取base64编码的文件。我以为我可以使用正则表达式来提取base64部分,然后我可以解码它们,例如。

preg_match('/Content-Transfer-Encoding: base64\s(.*)\sContent-Type:/', $message['body'], $matches);

echo base64_decode($matches[0]);

但是我没有得到任何比赛,因为我认为我的正则表达式不起作用。理想情况下,我想捕获在“Content-Transfer-Encoding:”之后开始的每个部分,并以另一个“Content-Type:”部分开始结束。我的问题是,我如何正则表达所有base64部分? e.g。

Content-Transfer-Encoding :(将此部分视为匹配)Content-Type:

以下是信息的一部分,完整的字符串可以在这里找到:

  

http://pastebin.com/A5XXnSaT

     

--_004_D16F6E4A2986D34F9D752E3564EAC46F359618EFAPP1197ghakfplc_ Content-Type:multipart / alternative; boundary =“_ 000_D16F6E4A2986D34F9D752E3564EAC46F359618EFAPP1197ghakfplc_”--_ 000_D16F6E4A2986D34F9D752E3564EAC46F359618EFAPP1197ghakfplc_ Content-Type:text / plain;字符集= “UTF-8” 内容传输编码:BASE64 SGksIFBsZWF​​zZSBmaW5kIHRoZSBhdHRhY2hlZCBQRlMgZXJyb3IgUmVwb3J0DQoKLS0tLS0tLS0t LQpCJlEgcGxjClJlZ2lzdGVyZWQgT2ZmaWNlOiBCJlEgSG91c2UsIENoZXN0bnV0IEF2ZW51ZSwg Q2hhbmRsZXJzIEZvcmQsIEVhc3RsZWlnaCwgSGFtcHNoaXJlLCBTTzUzIDNMRQpCdXkgT25saW5l IE5PVyBhdCB3d3cuZGl5LmNvbSBvciBmb2xsb3cgQiZRIG9uIEZhY2Vib29rIHd3dy5mYWNlYm9v ...

1 个答案:

答案 0 :(得分:-1)

输出6个解码部分

$result=[];
preg_match_all('/Content-Transfer-Encoding: base64\s(.*?)\s--/', $message['body'], $matches);

foreach ($matches[1] as $base) {
    $result[] = base64_decode($base);
}

print_r($result);

示例:https://eval.in/438478