PHP正则表达式从电子邮件头中获取多行值
我有一个简短的问题。如何从多行电子邮件标题中获取值 以下是电子邮件标题中的主题值示例:PHP正则表达式从电子邮件头中获取多行值,php,regex,email,Php,Regex,Email,我有一个简短的问题。如何从多行电子邮件标题中获取值 以下是电子邮件标题中的主题值示例: Subject: =?UTF-8?B?RGVhbHMgZm9yIHRoZSBEYXkgfCBQbHVzLCBzYXZlIDI1JSBvbiA=?= =?UTF-8?B?bmVhcmx5IEVWRVJZVEhJTkch?= MIME-Version: 1.0 我使用以下正则表达式,但它只返回一行: '/Subject: (.*)/i' 现在我尝试使用下面的语句并返回两行,但是当主题只有一行时,它会返回
Subject: =?UTF-8?B?RGVhbHMgZm9yIHRoZSBEYXkgfCBQbHVzLCBzYXZlIDI1JSBvbiA=?=
=?UTF-8?B?bmVhcmx5IEVWRVJZVEhJTkch?=
MIME-Version: 1.0
我使用以下正则表达式,但它只返回一行:
'/Subject: (.*)/i'
现在我尝试使用下面的语句并返回两行,但是当主题只有一行时,它会返回其他不需要的标题信息(MIME版本…)
如果正则表达式以空格(\s*)开头,并且可以跨越多行,即如果“Subject”的长度不同,那么如何修改正则表达式以仅拉动第二行
谢谢你的帮助
更新解决方案
感谢@G-Nugget,下面是一个正则表达式,它将执行我想要的操作并将结果分组:
/Subject: ((.*)(\n\s+(.*))*)/i
你的第二个正则表达式很接近。此修改版本应实现以下功能:
/Subject: (.*)(\n\s+(.*))*/i
通过将“代码> */COD>中间切换为<代码> +<代码>,在开始时必须有一个空间来抓取它。末尾的
*
允许正则表达式匹配任意数量的行,只要第一行以外的所有行都以空格开头。第二个正则表达式已接近。此修改版本应实现以下功能:
/Subject: (.*)(\n\s+(.*))*/i
通过将“代码> */COD>中间切换为<代码> +<代码>,在开始时必须有一个空间来抓取它。末尾的
*
允许正则表达式匹配任意数量的行,只要第一行以外的所有行都以空格开头。我强烈建议使用带有“”修饰符和“^”的正则表达式仅在行的开头搜索:
/^Subject:(.*)(\n\s+(.*))*/im
避免匹配与预期完全不同的标头-例如:
“X主题”而不是“主题”
“X-Google-DKIM-Signature”而不是“DKIM-Signature”我强烈建议使用带有“”修饰符和“^”的regexp只在行首搜索:
/^Subject:(.*)(\n\s+(.*))*/im
避免匹配与预期完全不同的标头-例如:
“X主题”而不是“主题”
“X-Google-DKIM-Signature”而不是“DKIM Signature”谢谢您的建议!不幸的是,如果主题在一行上,这似乎不起作用。它返回一个空数组。@thiesdiggity我的错,我正在用修复和奖励更新我的答案。这很有效!我用最后的正则表达式更新了我的问题。我对它做了一点修改以合并结果。请小心使用此解决方案,因为它可能意外地匹配“AnythingSubject:…”。请看下面我的答案。谢谢你的建议!不幸的是,如果主题在一行上,这似乎不起作用。它返回一个空数组。@thiesdiggity我的错,我正在用修复和奖励更新我的答案。这很有效!我用最后的正则表达式更新了我的问题。我对它做了一点修改以合并结果。请小心使用此解决方案,因为它可能意外地匹配“AnythingSubject:…”。请参阅下面我的答案。使用正确解析邮件标题的库,请参阅PHP手册了解现有选项。使用正确解析邮件标题的库,请参阅PHP手册了解现有选项。