好的,我正在尝试使用正则表达式在电子邮件字符串中查找 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)
它确实有效。
所以这似乎是最后一个或 |
语句似乎有点缺陷。
有人可以提供一个好的建议吗?这对快速衰老的人有很大帮助。 :-)
最佳答案
使用正则表达式
input.match /^(?:[A-Za-z0-9+\/]{4}\n?)*(?:[A-Za-z0-9+\/]{2}==|[A-Za-z0-9+\/]{3}=)?$/
参见this demo 。
关于ruby - 正则表达式在电子邮件的原始正文中查找 Base64 (Ruby),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21267288/