好吧,所以我試圖使用正則表達式在電子郵件字符串中查找Base64圖像。正則表達式在電子郵件(Ruby)的原始體中找到Base64
特定Base64編碼字符串的最後兩行看起來是這樣的:
ublR+iVp4k0KLTdJt7jULC0uIrZY3UkJuYZ56859aK+Ftc1H4ja5ei+0a2s49M2BIt+CSBnuQc0V
6tLIrxTsdiZ//9k=
好了,所以這是我的正則表達式
^(?:[A-Za-z0-9+\//n]{4})*(?:[A-Za-z0-9+\/]{2}==|[A-Za-z0-9+\/]{3}=|[A-Za-z0-9+\/]{4})$
並分解爲我自己的理智
^(?:[A-Za-z0-9+\/\n]{4})
的字符串的開頭應該有四個字符(即Base64有效的和新行的那些字符)
*
應當進行至少一次,但可能的次
(...)$
在字符串的結尾負載...
[A-Za-z0-9+\/]{2}==
給我兩個字符和兩個緩衝區
|
或...
[A-Za-z0-9+\/]{3}=
三個字符和一個緩衝區
|
或...
[A-Za-z0-9+\/]
四個大字像以前一樣
所以
當我運行
/^(?:[A-Za-z0-9+\/\n]{4})*(?:[A-Za-z0-9+\/]{2}==|[A-Za-z0-9+\/]{3}=|[A-Za-z0-9+\/\n]{4})$/.match(email.raw_body)
它只匹配到倒數第二行的末尾。
然而
當我運行
/^(?:[A-Za-z0-9+\/\n]{4})*(?:[A-Za-z0-9+\/]{2}==|[A-Za-z0-9+\/]{3}=)$/.match(email.raw_body)
它的工作。
所以它似乎是最後或|
聲明,這似乎有點缺陷。
任何人都可以提供一個建議嗎?這對快速老化的人非常有幫助。 :-)
是否存在編碼塊的邊界/內容標記?如果它是一個MIME消息應該有。你有沒有嘗試過使用預製的寶石? –
您是否嘗試過[*簡單搜索*](http://stackoverflow.com/questions/tagged/regex+base64?sort=votes&pageSize=50)? – HamZa
嘿@theTinMan - 是的,有邊界標記。我正在使用[Thoughtbot的Griddler](https://github.com/thoughtbot/griddler)處理電子郵件,但有時附件不是附件 - 它們是內嵌圖像。 [正如你可以閱讀,](https://github.com/thoughtbot/griddler/issues/104)我也和Griddler一起奮鬥。這很有趣。 – Chris