1

我有一个快速的问题。如何从多行的电子邮件标题中获取值?

这是电子邮件标题中的示例主题值:

Subject: =?UTF-8?B?RGVhbHMgZm9yIHRoZSBEYXkgfCBQbHVzLCBzYXZlIDI1JSBvbiA=?=
   =?UTF-8?B?bmVhcmx5IEVWRVJZVEhJTkch?=
MIME-Version: 1.0

我正在使用以下正则表达式,但它只返回一行:

'/Subject: (.*)/i'

现在我尝试使用以下内容并返回两行,但是当主题只有一行时,它会返回其他不需要的标题信息(MIME-Version ...)。

'/Subject: (.*)(\n\s*(.*))/i'

如果正则表达式以空格 (\s*) 开头并且可以跨越多行,即如果“主题”的长度不同,我如何修改正则表达式以仅拉出第二行。

谢谢你的帮助!

更新解决方案

感谢@G-Nugget,下面是一个正则表达式,它可以做我想做的事情并对结果进行分组:

 /Subject: ((.*)(\n\s+(.*))*)/i
4

2 回答 2

1

你的第二个正则表达式很接近。这个修改后的版本应该可以解决问题:

/Subject: (.*)(\n\s+(.*))*/i

通过*将中间的 切换为 a +,行首必须有一个空格才能抓住它。最后*的 允许正则表达式匹配任意数量的行,只要除第一个以外的所有行都以空格开头。

于 2012-09-25T21:55:37.930 回答
0

我强烈建议使用带有“ m ”修饰符和“^”的正则表达式仅在行首进行搜索:

/^Subject: (.*)(\n\s+(.*))*/im

避免匹配与预期完全不同的标题 - 例如:

“X-主题”而不是“主题”

“X-Google-DKIM-Signature”而不是“DKIM-Signature”

于 2017-03-09T17:46:45.993 回答