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():未知修饰符]
php正则去除base64,使用PHP preg_match_all的正则表达式base64块相关推荐
- 去除a链接+java正则_JavaScript实现正则去除a标签并保留内容的方法【测试可用】...
本文实例讲述了JavaScript实现正则去除a标签并保留内容的方法.分享给大家供大家参考,具体如下: 一.问题: 有如下HTML代码,要求用正则去除a标签,只留下内容 //www.jb51.net ...
- php 正则去除script,javascript正则实现php中的加入和去除反斜杠函数效果
php中要给指定的指定的字符加上或去除反斜杠,可使用现成的函数:addcslashes() & stripcslashes() 来实现,实例代码: $str="select * fr ...
- php 正则替换style,php正则去除js,class,id,style标签代码
在写xml的时候,文档要求内容里面只要图片和段落就可以了,其他的css,js什么的都不需要. 所以,在输出的时候,就要用正则去过滤掉不需要的标签代码. 第一种:php正则去除js标签代码.$preg ...
- php正则去掉width=,关于php使用正则去除宽高样式的方法
因工作需要,需要采集html,并把html内容保存到数据库中.为了避免影响使用,宽高样式需要删除.例如图片和p中的width, height等. 不过采集到的html中,样式的写法各有不同,例如大小写 ...
- Python正则去除中英文标点的操作手法
我们在用Python制作一些SEO小工具的时候总是会和文章打交道,大家知道通过Python直接采集,或者通过火车头采集文章的时候,为了保全文章的主题内容可以完全的采集到,文章的内容里面都是有很多的标点 ...
- java 使用正则去除字符串首尾两端指定的字符
java 使用正则去除字符串首尾两端指定的字符 且中间的不做处理 /** * 去除字符串首尾两端指定的字符 * */ public static String trimBothEndsChars(St ...
- js 正则中冒号代表什么_javascript中正则表达式语法详解
好久都没有写博客了,主要是太懒了,尤其是在阳春三月,风和日丽的日子,太阳暖暖的照在身上,真想美美的睡上一觉.就导致了这篇博客拖到现在才开始动笔,javascript的正则这一块也不是什么新的东西,主要 ...
- java8中使用java.util.Base64报“java.lang.IllegalArgumentException: Illegal base64 character d”
概述 Base64是一种字符串编码格式,采用了A-Z,a-z,0-9,"+"和"/"这64个字符来编码原始字符(还有垫字符"=").一个字符 ...
- 正则 0个或多个_正则表达式一知半解
正则表达式一直是一个令人头疼但却又是十分重要的一个东西.熟练的使用正则表达式可以让你的工作事半功倍.接下来,一起来看看正则表达式是什么吧! 正则表达式概念 「正则表达式,又称规则表达式.」(英语:Re ...
最新文章
- MySQL数值扩大一百倍_Mysql优化----一条SQL百倍提升之旅
- FPGA之道(66)代码中的约束信息(三)存储器以及寄存器的相关约束
- Ajax在火狐下提示跨域问题的解决方案
- [docker] 04 使用docker容器
- class h5 点击后样式变化_H5学习笔记
- android模拟全局按键,android命令行模拟输入事件(文字、按键、触摸等)
- oracle 10g安装黑框消失,win7下安装和卸载oracle 10g
- 【Linux】一步一步学Linux——tty命令(240)
- linux单次任务调度,go任务调度2(linux的cron调用)
- 如何在Kubernetes上运行PostgreSQL
- 【LeetCode 剑指offer刷题】特殊数题3:204 Count Primes
- 【python工具】获取linux和windows系统指定接口的IP地址
- Mysql管理之二进制日志文件的管理
- PHP基础知识------页面静态化
- 在电脑上怎么做报表新手_初学者在电脑上如何制作电子表格
- PHP实现sha-256哈希算法
- Android记账本APP开发进阶版
- java 3D 第二章 java 3D基本概念
- Auto.js学习笔记2:真机连接vscode开发工具进行调试,自动开启微信app,自动切换通讯录和微信界面
- iphone文件app里无法连接服务器,苹果商店怎么打不开 无法连接到app store解决方法...
热门文章
- 【youcans 的 OpenCV 例程200篇】149. 图像分割之边缘模型
- 【OpenCV 例程200篇】06. 像素的编辑(img.itemset)
- 新手博客,开博立言_Youcans2021
- php熊掌号怎么设置json-ld,dedecms织梦系统对接百度熊掌号并添加JSON_LD数据
- Linux数码管和点阵程序,随笔:python turtle绘制八段数码管和共阳极8x8led点阵
- 识别产品外观的合格软件_产品外观质量视觉检测系统.PDF
- linux降低eigen3版本_玩转 Windows 自带的 Linux 子系统 (图文指南)
- vb microsoft.xmlhttp 获取所有超链接_编写我的第一个VB程序
- C++基础09-货物售卖和MyArray实现
- div展示html文本,html – 使文本适合div