Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP正则表达式从电子邮件头中获取多行值_Php_Regex_Email - Fatal编程技术网

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手册了解现有选项。