日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > php >内容正文

php

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

發布時間:2025/3/15 php 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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块的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。