php正则去除base64,使用PHP preg_match_all的正则表达式base64块

我正在尝试使用php中的正则表达式来匹配base64编码的块。 它以'Content-Transfer-Encoding: base64'开头,因此我希望可以在此之后匹配内容,但是下面的正则表达式无法正常工作。 请帮助我修复此正则表达式以匹配base64块。 在电子邮件正文中,base64块被重复两次,我假设第一个块是文本版本,第二个html。 我想匹配两个base 64块,这就是为什么我使用preg匹配所有而不匹配文本的中间部分的原因。

这是我到目前为止的代码

$regex = '/Content-Transfer-Encoding:\\sbase64\\s\

(.*?)/';

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

使用.*而不是.*?和s标志将.与新行匹配:-regex101.com/r/eM4hB3/1

听@ rock321987,但是在此之前,请添加更多有关整个上下文的详细信息?

这应该工作

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

正则表达式演示

PHP代码

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

$str ="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\";

preg_match_all($re, $str, $matches);

print_r($matches[1]);

Ideone演示

$matches是一个数组数组。

$matches[0]包含所有匹配的值,包括Content-Transfer-Encoding:\\\\sbase64\\\\s+。

$matches[1]包含在Content-Transfer-Encoding:\\\\sbase64\\\\s+之后匹配的所有值

他所需要做的就是删除?。而已。

@ sweaver2112等待..实际上需要s修饰符将.匹配到换行符

删除?因为\ s \ n序列与那里的换行符都匹配,所以单独使用是可行的。 (\ s匹配换行符!)-但这不太可能发生或非常明显。您的回答很好。+ 1

@ sweaver2112你是对的..实际上有些问题使我感到困惑

@ sweaver2112我从OPs正则表达式中删除了\,并自欺欺人

老实说,我不知道\ s与换行符匹配,并且对于为什么只删除?也感到困惑。甚至都没有工作

抱歉,我编辑了该问题,以在base64重复两次时添加更多上下文。

@BenPaton您想同时捕获它们吗?

是的,两者都捕获,然后在base64部分之后都停止,我需要它在php中工作。我发现从regex101到php并不总是有效。

@BenPaton我已经更新了答案,但您的评论让我感到困惑。您想要Content-Transfer-Encoding: base64还是Content-Transfer-Encoding: base64之后的字符串?

我要同时使用base64块和其他任何东西

@BenPaton请参阅ideone演示。.$matches[1][0]包含第一个匹配项,$matches[1][1]包含第二个匹配项

不幸的是,这在我的环境中不起作用,因此我必须解决一些差异

@BenPaton你能告诉你你面临什么问题吗?

它只是找不到任何匹配项

@BenPaton这怎么可能?如果正确使用它应该可以工作

正则表达式现在似乎有点太复杂了。如果您能给我一个正则表达式,使其与第一个base64编码的块匹配,然后在到达空白时弯下腰来捕获,我将不胜感激。

@BenPaton在询问直到第一个空格之前,然后检查它:-regex101.com/r/eM4hB3/8不用担心那里的输入..您可以自己尝试尝试并告诉

试试这个:

preg_match_all('/Content-Transfer-Encoding: base64\\s+(.*?)$/', $subject, $result, PREG_PATTERN_ORDER);

$baseString = $result[1][0];

正则表达式说明:

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

Options: Casesensitive; Exactspacing; Dotdoesn’tmatchlinebreaks; ^$don’tmatchatlinebreaks; Greedyquantifiers

Match the character string"Content-Transfer-Encoding: base64" literally (case sensitive) ?Content-Transfer-Encoding: base64?

Match a single character that is a"whitespace character" (any Unicode separator, tab, line feed, carriage return, vertical tab, form feed, next line) ?\\s+?

Between one and unlimited times, as many times as possible, giving back as needed (greedy) ?+?

Match the regex below and capture its match into backreference number 1 ?(.*?)?

Match any single character that is NOT a line break character (line feed) ?.*??

Between zero and unlimited times, as few times as possible, expanding as needed (lazy) ?*??

Assert position at the end of the string, or before the line break at the end of the string, if any (line feed) ?$?

正则演示:

https://regex101.com/r/lI8lJ6/1

实时PHP演示:

http://ideone.com/fK3z3n

更新:

根据您的评论,您可以使用此正则表达式捕获并验证base64字符串:

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

SRC:https://stackoverflow.com/a/475217/797495

抱歉,我编辑了该问题,以在base64重复两次时添加更多上下文。

您需要哪个base64?第一还是第二?第二个似乎不是有效的base64字符串。

我需要捕获两个,然后在两个的base64部分之后停止,我需要它在php中工作。第二个可能无效,因为它只是其中的一小部分。我不想把整个事情都拖长了,它包含我不应该在这里分享的信息。

您可以使用有效的语法将base64字符串的内容更改为伪造的内容。没有有效的示例,我无法进一步帮助您。

实际上,所有基数为64的字符串都不有效。检查我的更新

这是一个有效的例子,我已经切断了它。

该正则表达式通过警告发出了此错误消息:preg_match_all():未知修饰符]

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/574052.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

真机iOS SDK升级后xcode不能进行真机调试 怎么办

今天升级了一下iPod的SDK到iOS8,xcode仅仅能支持到7.1,真机调试遇到问题???以下是解决的方法!找到xcode,点击右键。打开显示包内容,按路径Contents/Develpoer/Platforms/iPoneOS.pla…

php 中断输出,PHP捕捉异常中断的方法

前言任何程序员在开发时都可能遇到过一些失误,或其他原因造成错误的发生。当然,用户如果不愿意或不遵循应用程序的约束,也会在使用时引起一些错误发生。本文主要介绍在php中用 register_shutdown_function进行异常处理的方法,有需…

JAVA的BIT数组

写个小东西,要去重复数字,用到BIT数组,虽然JAVA已经提供了一个BitSet,不过自己手痒,又写了一个简单的 原理就不写了,网上一大堆 1 import java.util.Iterator;2 import java.util.function.BiConsumer;3 4 …

php环境苹果搭建,mac下搭建php环境

本文主要和大家分享mac下搭建php环境,最近工作环境切换到Mac,所以以OS X Yosemite(10.10.1)为例,记录一下从零开始安装Mac下LNMP环境的过程确保系统已经安装xcode,然后使用一行命令安装依赖管理工具Homebrew。ruby -e "$(cur…

php后门 佛像,35张活的再久,也未必见过的照片,图2是佛像通过CT扫描后内部照...

今天这组照片可能很多人都是一次见到,包括小编本人看了也十分惊讶。最大的感触是,很多的商品居然是这么做出来的,看完了才有一种豁然开朗的感觉,废话不多说一起看看吧。鸡蛋里面套鸡蛋1000年前佛像,经过CT扫描后&#…

oracle层次化查询

一般我们在处理层次关系的数据时,在建ER关系模型,我们都会产生自关联的数据结构。如:emp员工表中empno和managerno就是,这样就产生了层次化的结构。 那么如何快速的查询一个已知的根节点,查找到相应的一系列子节点呢&a…

民生付 php,“民生付”升级我省电商支付体验

■周昆 俞正林我省电子商务的发展正在得到更多的金融支持,未开通网银的消费者也能方便地进行网上支付了。记者近日从民生银行福州分行了解到,该行全网线上收单产品“民生付”已经得到我省电子商务企业的青睐。通过该服务,我省电子商务商户只需…

droidbox官网

droidbox官网,droidbox已经移植到github上了 https://github.com/pjlantz/droidbox 转载于:https://www.cnblogs.com/nightnine/p/5169261.html

java实现缓存中间件,Redis,分布式系统中不可少的缓存中间件

1.为什么要用缓存内存在整个计算机系统来说也就是一个缓存,CPU操作内存速度很快;因为操作数据的时候,先从硬盘中取出数据放到内存中,然后CPU操作数据缓存:提升访问效率,将一些频繁访问地放在缓存里面image.…

matlab自带的人脸分类器,基于MATLAB,运用PCA+SVM的特征脸方法人脸识别

概述:此文章将要描述一种基于MATLAB平台,运用PCA主成分分析方法对图片数据进行降维,运用SVM支持向量机分类器对降维后的图片数据进行分类处理,从而达到人脸识别的目的。首先要感谢以下几篇文章的作者(后面引用会标识文章标号)2.PC…

J2EE的13个规范之(二) JDBC 及其使用

我想大家都知道ODBC是什么?ODBC(OpenDatabaseConnectivity。开放数据库互连)是微软公司开放服务结构(WOSA,WindowsOpenServicesArchitecture)中有关数据库的一个组成部分。它建立了一组规范,并提供了一组对数据库訪问的标准API(应…

被恶意上传了.php,轻松解决网站被恶意镜像

老听说有人的网站被恶意镜像,于是我先收藏几种解决方法。镜像站看似一个完整的站点,其实每次用户访问镜像站点,他的小偷程序就会来正版的网站查询数据,并修改相关链接然后呈献给用户。实质上还是在读取原站的数据,我们…

【代码笔记】iOS-对UIView进行截图

一,效果图。 二,工程图。 三,代码。 RootViewController.m #import "RootViewController.h"interface RootViewController ()endimplementation RootViewController- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBund…

matlab实现浮点转定点,浮点转定点方法总结.doc

浮点转定点方法总结浮点转定点方法总结—孔德琦目录定点运算方法31.1 数 的 定 标31.2c语言:从浮点到定点41.2.1 加法41.2.2乘法61.2.3除法71.2.4 三角函数运算81.2.5 开方运算91.3 附录101.3.1 附录1:定点函数库101.3.2附录2:正弦和余弦表28…

caffe官网的部分翻译及NG的教程

Caffe原来叫:Convolutional Architecture for Fast Feature Embedding 官网的个人翻译:http://blog.csdn.net/fengbingchun/article/details/49535873 NG的英文教程:http://ufldl.stanford.edu/tutorial/supervised/MultiLayerNeuralNetworks…

matlab 中 t=0:t:(n-1)t;k=0:n-1,《MATLAB语言与应用》练习题答案

《MATLAB 语言与应用》实验课程任务书一、 实验教学目标与基本要求上机实验是本课程重要的实践教学环节;实验的目的不仅仅是验证理论知识,更重要的是通过上机实验,加强学生的实验手段与实践技能,掌握应用MATLAB 语言求解问题的方法…

Kerbose

http://blog.csdn.net/wulantian/article/details/42418231转载于:https://www.cnblogs.com/diyunpeng/p/5175290.html

IIS虚拟目录实现与文件服务器网络驱动器映射共享

这篇文章转载别人,想原创作者致敬! 我本人也遇到同样的问题,故转载记录。 本文重点描述如何使用IIS访问共享资源来架设站点或执行 ASP.Net 等脚本。 通常情况下,拥有多台服务器的朋友在使用IIS建立站点的时候,会遇到如…

rsa php前台加密后台解密源码,使用RSA实现前端公钥加密后端私钥解密

项目中在用户登录时需要进行用户名和密码加密,这里选用了RSA非对称加密的方式.公钥私钥:OpenSSL的公钥私钥(Node crypto模块限制)前端: jsencrypt库加密后端: Node crypto模块使用openssl生成公钥私钥linux生成公钥私钥命令:genrsa -out rsa_private_key.pem 1024 // 生成1024位…

php 事件调度,MySQL的事件调度器使用介绍

自MySQL5.1.0起,增加了一个非常有特色的功能ndash;事件调度器(Event Scheduler),可以用做定时执行某些特定任务,可以看作基于自MySQL5.1.0起,增加了一个非常有特色的功能–事件调度器(Event Scheduler),可以用做定时执…