我真的很想知道我是否真的是第一个问这个问题的人,还是我如此盲目地找到一些关于这个问题的信息…
我有一个较长的文本,我想剥离它的base64编码的字符串
I am a text and have some lines with some content
There are more than one line but sometimes I have
aSBhbSBhIG5vcm1hbCB0ZXh0IHRoYXQgd2FzIGNvZ
GVkIGluIGJhc2UgNjQgYW5kIG5vdyBpIHdhcyB0cmFu
c2xhdGVkIGJhY2sgdG8gYmxhbmsgdGV4dGZvcm1hd
C4gaSB0aGFuayB5b3UgZm9yIHBheWluZyBhdHRlbnRp
b24uIGJ5ZQ==
and this is what I want to strip / extract by using php
如您所见,文本中有base64编码的数据,我想提取/分割这些行.
我已经尝试了很多类似的正则表达式示例
$regex = '@^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$@m';
preg_match($regex, $content, $output_array );
但这并没有解决任何问题…
我需要的是仅选择基本字符串的正则表达式…
这有可能吗?我的意思是正则表达式可以选择base64吗?我猜 :)
编辑:字符串源是电子邮件的内容
EDIT2:猜测这种情况下的最佳语法,以便跟踪具有多个大写字符且可以有数字且没有空格的字符串.但是正则表达式不是我的日常食物:D
解决方法:
首先:您不能可靠地做到这一点!
为什么?
很简单,在某些情况下,base64之所以如此出色的原因是,它使用“标准”字符对所有数据进行编码.那些用于普通文本,句子甚至是甚至是单词的单词.
背景
“ Hello”是base64编码的字符串吗?好吧,是的,其含义是“有效的base64编码”.它可能会返回很多乱码,但这是一个base64-ok字符串.
因此,您只能决定一个长度,在此长度之后,您可以认为所连接的字符没有任何空格进行base64编码.当然,在德语这样的语言中,您可能在这里遇到很多麻烦,因为那里有一个复合名词,例如“Bäckerfachverkäuferinnenhosenherstellungsautomatenzuliefererdienst”或诸如此类.
解决方法
因此,从长度上来说,您必须自行决定,然后就可以这样做:
[a-zA-Z0-9\+\/\=]{20,}
我认为“ 20”是此处“ base64编码的内容”的最小长度,但是正如您所说,这取决于您.另外,请注意,=并不是真正的编码内容,而是填充字节,但我仍将其添加到了正则表达式中.
编辑:Gnah ..您甚至可以在我的示例中看到我没有抓住最后一行:)将数字更改为12时,它在这里可以正常工作,但是可能有超过12个字符的单词…所以-如前所述,以这种方式并不是真的可靠.
标签:php,regex
来源: https://codeday.me/bug/20191119/2033854.html