正则表达式在电子邮件的原始主体(Ruby)中找到Base64

Chr*_*ris 2 ruby regex email base64

好的,我正在尝试使用正则表达式在电子邮件字符串中查找Base64图像.

该特定Base64字符串的最后两行如下所示:

ublR+iVp4k0KLTdJt7jULC0uIrZY3UkJuYZ56859aK+Ftc1H4ja5ei+0a2s49M2BIt+CSBnuQc0V
6tLIrxTsdiZ//9k=
Run Code Online (Sandbox Code Playgroud)

好的,所以这是我的正则表达式

^(?:[A-Za-z0-9+\//n]{4})*(?:[A-Za-z0-9+\/]{2}==|[A-Za-z0-9+\/]{3}=|[A-Za-z0-9+\/]{4})$
Run Code Online (Sandbox Code Playgroud)

为了我自己的理智而分解

^(?:[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)

它确实有效.

所以它似乎是最后一个或|声明似乎有点缺陷.

谁能提出一个善意的建议?这对于一个快速衰老的人来说非常有帮助.:-)

Ωme*_*ega 5

使用正则表达式

input.match /^(?:[A-Za-z0-9+\/]{4}\n?)*(?:[A-Za-z0-9+\/]{2}==|[A-Za-z0-9+\/]{3}=)?$/
Run Code Online (Sandbox Code Playgroud)

这个演示.