Java Regular Expression用于捕获电子邮件编码的附件字符串

时间:2014-12-15 12:40:55

标签: java regex

我想编写一个正则表达式,用于捕获电子邮件MIME消息字符串(eml)中的编码字部分。例如,这是电子邮件的一部分:

<div dir=3D"ltr"><br clear=3D"all"><div><div dir=3D"ltr"><div style=3D"dire=
ction:rtl">-------------</div><div style=3D"direction:rtl">=D7=91=D7=91=D7=
=A8=D7=9B=D7=94,</div><div style=3D"direction:rtl">=D7=90=D7=91=D7=99=D7=A2=
=D7=93 =D7=9B=D7=94=D7=9F</div></div></div>
</div>

--20cf3003bc2e044e980500f755dc--
--20cf3003bc2e044e9d0500f755de
Content-Type: text/plain; charset=US-ASCII; name="EhudBanay.txt"
Content-Disposition: attachment; filename="EhudBanay.txt"
Content-Transfer-Encoding: base64
X-Attachment-Id: f_hz0z4us30

aHR0cHM6Ly93d3cuZmFjZWJvb2suY29tL2wucGhwP3U9aHR0cHMlM0ElMkYlMkZ3d3cucmFwaWRz
aGFyZS5jb20lMkZmaWxlcyUyRjM4NzAxNTA2MDclMkZFaHVkX0JhbmFpXy1fVGlwX1RpcGFfXzE5
OThfLnJhciZoPTdBUUZRb0RMQQ0KDQpodHRwczovL3d3dy5mYWNlYm9vay5jb20vbC5waHA/dT1o
dHRwcyUzQSUyRiUyRnd3dy5yYXBpZHNoYXJlLmNvbSUyRmZpbGVzJTJGMzk5MzMyNjg1MSUyRkVo
dWRfQmFuYWlfLV9UYWhhdF9TaWFoX0hhWWFzbWluXzE5ODkucmFyJmg9QkFRRWhJY3djDQoNCmh0
dHBzOi8vd3d3LmZhY2Vib29rLmNvbS9sLnBocD91PWh0dHBzJTNBJTJGJTJGd3d3LnJhcGlkc2hh
cmUuY29tJTJGZmlsZXMlMkYzMjQwMTM5MTMyJTJGRWh1ZF9CYW5haV8tX1Jlc2lzZXlfTGFpbGFf
MjAxMS5yYXImaD1RQVFHN0pGWXUNCg0KaHR0cHM6Ly93d3cuZmFjZWJvb2suY29tL2wucGhwP3U9
aHR0cHMlM0ElMkYlMkZ3d3cucmFwaWRzaGFyZS5jb20lMkZmaWxlcyUyRjE5NTE2ODA4MTglMkZF
aHVkX0JhbmFpXy1fT2RfTWVhdF9fMTk5Nl8ucmFyJmg9YUFRRUVuaUIxDQoNCmh0dHBzOi8vd3d3
LmZhY2Vib29rLmNvbS9sLnBocD91PWh0dHBzJTNBJTJGJTJGd3d3LnJhcGlkc2hhcmUuY29tJTJG
ZmlsZXMlMkYyMjc2NTc5MTgzJTJGRWh1ZF9CYW5haV8tX0thcm92X18xOTg5Xy5yYXImaD1mQVFH
a2dYVXENCg0KaHR0cHM6Ly93d3cuZmFjZWJvb2suY29tL2wucGhwP3U9aHR0cHMlM0ElMkYlMkZ3
d3cucmFwaWRzaGFyZS5jb20lMkZmaWxlcyUyRjQwOTg0NjQzNjYlMkZFaHVkX0JhbmFpXy1fSGFT
aGxpc2hpX18xOTkyXy5yYXImaD1GQVFGNjRmY3gNCg0KaHR0cHM6Ly93d3cuZmFjZWJvb2suY29t
L2wucGhwP3U9aHR0cHMlM0ElMkYlMkZ3d3cucmFwaWRzaGFyZS5jb20lMkZmaWxlcyUyRjMxNDY1
NDc2OTElMkZFaHVkX0JhbmFpXy1fRWh1ZF9CYW5haV9WZUhhUGxpdGltX18xOTg3X19GLnBhcnQy
LnJhciZoPUJBUUVoSWN3Yw0KDQpodHRwczovL3d3dy5mYWNlYm9vay5jb20vbC5waHA/dT1odHRw
cyUzQSUyRiUyRnd3dy5yYXBpZHNoYXJlLmNvbSUyRmZpbGVzJTJGMjYwNDg2Njc1MiUyRkVodWRf
QmFuYWlfLV9FaHVkX0JhbmFpX1ZlSGFQbGl0aW1fXzE5ODdfX0YucGFydDEucmFyJmg9REFRSHpG
LXZBDQoNCmh0dHBzOi8vd3d3LmZhY2Vib29rLmNvbS9sLnBocD91PWh0dHBzJTNBJTJGJTJGd3d3
LnJhcGlkc2hhcmUuY29tJTJGZmlsZXMlMkYyNjQxMzIwNzg2JTJGRWh1ZF9CYW5haV8tX0Ryb3Bz
X09mX1RoZV9OaWdodF9fMjAxMV8ucmFyJmg9Y0FRRlRZQ1pTDQoNCmh0dHBzOi8vd3d3LmZhY2Vi
b29rLmNvbS9sLnBocD91PWh0dHBzJTNBJTJGJTJGd3d3LnJhcGlkc2hhcmUuY29tJTJGZmlsZXMl
MkYzMTQ3NzUzNzAwJTJGRWh1ZCUyNTIwQmFuYWklMjUyMC0lMjUyMEtlZXAlMjUyMERyaXZpbmcu
cGFydDEucmFyJmg9S0FRRWtPUkZTDQoNCmh0dHBzOi8vd3d3LmZhY2Vib29rLmNvbS9sLnBocD91
PWh0dHBzJTNBJTJGJTJGd3d3LnJhcGlkc2hhcmUuY29tJTJGZmlsZXMlMkYxNzc1NDI5NDY3JTJG
RWh1ZF9CYW5haV8tX0FuZV9MaV9fMjAwNF8ucmFyJmg9dkFRRWlEWXFu
--20cf3003bc2e044e9d0500f755de--

我只想抓住这一部分:

aHR0cHM6Ly93d3cuZmFjZWJvb2suY29tL2wucGhwP3U9aHR0cHMlM0ElMkYlMkZ3d3cucmFwaWRz
aGFyZS5jb20lMkZmaWxlcyUyRjM4NzAxNTA2MDclMkZFaHVkX0JhbmFpXy1fVGlwX1RpcGFfXzE5
OThfLnJhciZoPTdBUUZRb0RMQQ0KDQpodHRwczovL3d3dy5mYWNlYm9vay5jb20vbC5waHA/dT1o
dHRwcyUzQSUyRiUyRnd3dy5yYXBpZHNoYXJlLmNvbSUyRmZpbGVzJTJGMzk5MzMyNjg1MSUyRkVo
dWRfQmFuYWlfLV9UYWhhdF9TaWFoX0hhWWFzbWluXzE5ODkucmFyJmg9QkFRRWhJY3djDQoNCmh0
dHBzOi8vd3d3LmZhY2Vib29rLmNvbS9sLnBocD91PWh0dHBzJTNBJTJGJTJGd3d3LnJhcGlkc2hh
cmUuY29tJTJGZmlsZXMlMkYzMjQwMTM5MTMyJTJGRWh1ZF9CYW5haV8tX1Jlc2lzZXlfTGFpbGFf
MjAxMS5yYXImaD1RQVFHN0pGWXUNCg0KaHR0cHM6Ly93d3cuZmFjZWJvb2suY29tL2wucGhwP3U9
aHR0cHMlM0ElMkYlMkZ3d3cucmFwaWRzaGFyZS5jb20lMkZmaWxlcyUyRjE5NTE2ODA4MTglMkZF
aHVkX0JhbmFpXy1fT2RfTWVhdF9fMTk5Nl8ucmFyJmg9YUFRRUVuaUIxDQoNCmh0dHBzOi8vd3d3
LmZhY2Vib29rLmNvbS9sLnBocD91PWh0dHBzJTNBJTJGJTJGd3d3LnJhcGlkc2hhcmUuY29tJTJG
ZmlsZXMlMkYyMjc2NTc5MTgzJTJGRWh1ZF9CYW5haV8tX0thcm92X18xOTg5Xy5yYXImaD1mQVFH
a2dYVXENCg0KaHR0cHM6Ly93d3cuZmFjZWJvb2suY29tL2wucGhwP3U9aHR0cHMlM0ElMkYlMkZ3
d3cucmFwaWRzaGFyZS5jb20lMkZmaWxlcyUyRjQwOTg0NjQzNjYlMkZFaHVkX0JhbmFpXy1fSGFT
aGxpc2hpX18xOTkyXy5yYXImaD1GQVFGNjRmY3gNCg0KaHR0cHM6Ly93d3cuZmFjZWJvb2suY29t
L2wucGhwP3U9aHR0cHMlM0ElMkYlMkZ3d3cucmFwaWRzaGFyZS5jb20lMkZmaWxlcyUyRjMxNDY1
NDc2OTElMkZFaHVkX0JhbmFpXy1fRWh1ZF9CYW5haV9WZUhhUGxpdGltX18xOTg3X19GLnBhcnQy
LnJhciZoPUJBUUVoSWN3Yw0KDQpodHRwczovL3d3dy5mYWNlYm9vay5jb20vbC5waHA/dT1odHRw
cyUzQSUyRiUyRnd3dy5yYXBpZHNoYXJlLmNvbSUyRmZpbGVzJTJGMjYwNDg2Njc1MiUyRkVodWRf
QmFuYWlfLV9FaHVkX0JhbmFpX1ZlSGFQbGl0aW1fXzE5ODdfX0YucGFydDEucmFyJmg9REFRSHpG
LXZBDQoNCmh0dHBzOi8vd3d3LmZhY2Vib29rLmNvbS9sLnBocD91PWh0dHBzJTNBJTJGJTJGd3d3
LnJhcGlkc2hhcmUuY29tJTJGZmlsZXMlMkYyNjQxMzIwNzg2JTJGRWh1ZF9CYW5haV8tX0Ryb3Bz
X09mX1RoZV9OaWdodF9fMjAxMV8ucmFyJmg9Y0FRRlRZQ1pTDQoNCmh0dHBzOi8vd3d3LmZhY2Vi
b29rLmNvbS9sLnBocD91PWh0dHBzJTNBJTJGJTJGd3d3LnJhcGlkc2hhcmUuY29tJTJGZmlsZXMl
MkYzMTQ3NzUzNzAwJTJGRWh1ZCUyNTIwQmFuYWklMjUyMC0lMjUyMEtlZXAlMjUyMERyaXZpbmcu
cGFydDEucmFyJmg9S0FRRWtPUkZTDQoNCmh0dHBzOi8vd3d3LmZhY2Vib29rLmNvbS9sLnBocD91
PWh0dHBzJTNBJTJGJTJGd3d3LnJhcGlkc2hhcmUuY29tJTJGZmlsZXMlMkYxNzc1NDI5NDY3JTJG
RWh1ZF9CYW5haV8tX0FuZV9MaV9fMjAwNF8ucmFyJmg9dkFRRWlEWXFu

我写了下面的正则表达式: (?&LT = \ r \ n \ r \ n)的(。+ \ r \ n)的+(?= - ) 这提供了我想要的结果。我认为: *正则表达式应该返回所有这些部分的出现。多 *在想要的部分之前总是有一条空行。 *所需部分后面跟着一行#34; - &#34; (它们之间可能存在分隔线。)

这个解决方案的问题是我在线程&#34; main&#34;中得到了Exception。 java.lang.StackOverflowError当输入字符串很长时,是什么让我想到了正则表达式的效率。 我想使正则表达式更精确。我们可以利用这个事实,即在想要的部分之前的空行之前的某个地方,始终有一行以&#34; Content-Transfer-Encoding开头:&#34;。 有人可以帮忙吗?

1 个答案:

答案 0 :(得分:0)

您可以尝试增加堆栈大小:-Xss2048k