Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/281.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
带有php preg_match_all的Regex base64块_Php_Regex_Base64_Preg Match All - Fatal编程技术网

带有php preg_match_all的Regex base64块

带有php preg_match_all的Regex base64块,php,regex,base64,preg-match-all,Php,Regex,Base64,Preg Match All,我试图在php中使用正则表达式匹配base64编码块。它的前面是“Content-Transfer-Encoding:base64”,所以我希望我可以在这之后匹配内容,但我下面的正则表达式不起作用。请帮助我修复此正则表达式以匹配base64块。base64块在电子邮件正文中重复两次,我假定第一个块是文本版本,第二个是html。我想匹配两个基本64块,这就是为什么我使用preg match all,而不是这个中间的文本位 这是我目前掌握的代码 $regex = '/Content-Transfer

我试图在php中使用正则表达式匹配base64编码块。它的前面是
“Content-Transfer-Encoding:base64”
,所以我希望我可以在这之后匹配内容,但我下面的正则表达式不起作用。请帮助我修复此正则表达式以匹配base64块。base64块在电子邮件正文中重复两次,我假定第一个块是文本版本,第二个是html。我想匹配两个基本64块,这就是为什么我使用preg match all,而不是这个中间的文本位

这是我目前掌握的代码

$regex = '/Content-Transfer-Encoding:\sbase64\s\n(.*?)/';

preg_match_all($regex, $message, $matches); 
这是一条信息:

Content-Transfer-Encoding: base64

DQoNCg0KDQoNCg0KDQoNCg0KDQpbQiZRXTxodHRwOi8vd3d3LmRpeS5jb20+DQoNCg0KDQoNCg0K
W2h0dHA6Ly9raW5nZmlzaGVyLnNjZW5lNy5jb20vaXMvaW1hZ2UvS2luZ2Zpc2hlci9pY29uX3N0
b3JlX2xvY2F0b3I/d2lkPTM2JmhlaT0zNiZxbHQ9MTAwXTxodHRwOi8vd3d3LmRpeS5jb20vZmlu
ZC1hLXN0b3JlPg0KDQoNCg0KRmluZCBhIHN0b3JlPGh0dHA6Ly93d3cuZGl5LmNvbS9maW5kLWEt
c3RvcmU+DQoNCg0KDQoNCkN1c3RvbWVyIFNlcnZpY2VzDQoNCjAzMzMgMDE0IDMzNTcNCg0KDQoN
Cg0KDQoNCg0KDQoNCkluc3BpcmF0aW9uPGh0dHA6Ly93d3cuZGl5LmNvbS9pbnNwaXJhdGlvbi8w
Lmlyb290Pg0KDQpQcm9qZWN0czxodHRwOi8vd3d3LmRpeS5jb20vcHJvamVjdHMvMi5wcm9vdD4N
Cg0KU2hvcDxodHRwOi8vd3d3LmRpeS5jb20vc2hvcC8+DQoNCkhlbHAgJiBBZHZpY2U8aHR0cDov
L3d3dy5kaXkuY29tL2hlbHAtYWR2aWNlLzEuaHJvb3Q+DQoNCk15IGFjY291bnQ8aHR0cDovL3d3
dy5kaXkuY29tL2N1c3RvbWVyL215X2FjY291bnQvPg0KDQoNCg0KDQoNCg0KDQoNCg0KRGVhciBC
ZW4gUGF0b24NCg0KDQoNCg0KVGhhbmsgeW91IGZvciB5b3VyIG9yZGVyDQoNCg0KDQoNCg0KT3Jk
ZXIgbnVtYmVyOg0KDQowMDYzMTA5MDU1DQoNCg0KDQpUb3RhbCBDb3N0Og0KDQrCozMuMjcNCg0K
DQoNClRoYW5rIHlvdSBmb3Igb3JkZXJpbmcgZnJvbSBCJlEuIFlvdeKAmWxsIGZpbmQgZGV0YWls
cyBvZiB5b3VyIG9yZGVyIGFuZCBkZWxpdmVyeSBvciBjb2xsZWN0aW9uIGluZm9ybWF0aW9uIGJl
bG93LiBGb3IgaGVscCB3aXRoIHF1ZXN0aW9ucyBhYm91dCBvdXIgc2VydmljZSwgcGxlYXNlIHNl

--_000_D16F6E4A2986D34F9D752E3564EAC46F51043449APP1198ghakfplc_
Content-Type: text/html; charset="utf-8"
Content-Transfer-Encoding: base64

PGh0bWwgeG1sbnM6dj0idXJuOnNjaGVtYXMtbWljcm9zb2Z0LWNvbTp2bWwiIHhtbG5zOm89InVy
bjpzY2hlbWFzLW1pY3Jvc29mdC1jb206b2ZmaWNlOm9mZmljZSIgeG1sbnM6dz0idXJuOnNjaGVt
YXMtbWljcm9zb2Z0LWNvbTpvZmZpY2U6d29yZCIgeG1sbnM6bT0iaHR0cDovL3NjaGVtYXMubWlj
cm9zb2Z0LmNvbS9vZmZpY2UvMjAwNC8xMi9vbW1sIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcv
这应该行得通

/Content-Transfer-Encoding:\sbase64\s+(.*)(?=Content-Transfer-Encoding: base64|$)/g

PHP代码

$matches
是数组的数组

$matches[0]
包含所有匹配的值,包括
内容传输编码:\\sbase64\\s+

$matches[1]
包含
内容传输编码之后匹配的所有值:\\sbase64\\s+

尝试以下操作:

preg_match_all('/Content-Transfer-Encoding: base64\s+(.*?)$/', $subject, $result, PREG_PATTERN_ORDER);
$baseString = $result[1][0];

正则表达式解释:

Content-Transfer-Encoding: base64\s+(.*?)$


正则表达式演示:

Content-Transfer-Encoding: base64\s+(.*?)$


现场PHP演示:

Content-Transfer-Encoding: base64\s+(.*?)$


更新:

Content-Transfer-Encoding: base64\s+(.*?)$
根据您的评论,您可以使用此正则表达式捕获和验证base64字符串:

^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$

SRC:

使用
*
而不是
*?
s
标记来匹配
新行,如:-收听@rock321987,但在此之前,添加一些关于整个上下文的更多细节?他需要做的就是删除?。就是这样。@sweaver2112 wait..实际上需要
s
修饰符来匹配
到换行符删除?单独使用将起作用,因为\s\n序列与此处的两个换行符都匹配。(\s匹配新行!)-但这不太可能发生,也不是很明显。你的回答很好+1@sweaver2112你是对的。实际上有一个问题让我很困惑。老实说,我不知道\s匹配新线,也很困惑为什么要删除?很抱歉,我编辑了这个问题以添加更多上下文,因为base64重复了两次。您需要哪个base64?第一还是第二?第二个似乎不是有效的base64字符串。我需要捕获这两个字符串,然后在这两个字符串的base64部分之后停止,我需要它在php中工作。第二个可能无效,因为它只是它的一小部分。我不想错过整个过程,因为它很长,并且包含我不应该在这里共享的信息。您可以将base64字符串的内容更改为伪造的内容,但使用有效的语法。如果没有一个有效的示例,我将无法进一步帮助您。实际上,您的64进制字符串中没有一个是有效的。检查我的更新