我正在使用此SO线程中的正则表达式模式:https://stackoverflow.com/a/11416262/
在电子邮件的正文消息中,可能会有多封电子邮件,因此我希望在特定字符串后抓取电子邮件:
The following users in your Google Apps domain appear to be affected: name@domain.com ....
这是我正在做的事情:
$message = (imap_fetchbody($inbox,$email_number,1.2));
if($message == '')
{
$message = imap_fetchbody($inbox,$email_number,1);
}
// Text inside pattern can be made smaller too (i.e. from 'Google' to 'affected:')
$pattern = '/(?<=The following users in your Google Apps domain appear to be affected: )\S+/i';
preg_match($pattern, $message, $match);
当我获得$ message的输出并检查该网站上的模式时:http://www.phpliveregex.com/它有效(显示电子邮件),但它在我的代码中不起作用。
var_dump($ match)显示
array (size=0)
empty
我想抓住正文中的电子邮件,稍后再使用。
编辑#1:
if (preg_match('/affected:/',$message)
echo 'true';
返回true,但如果它受到影响则不会:/&#39; (有空间)。 $ message的gettype是一个字符串,但我想知道是否还有新的行字符。这是真正的电子邮件视图: Real email sample
编辑#2: 很抱歉误导/不提供真实信息(我第一次使用imap)。问题是添加了换行符。我最终用&#39;替换了所有新行实例。 &#39 ;.现在,
if (preg_match('/The following users in your Google Apps domain appear to be affected: /',$string))
echo 'true';
返回true,但我的更大的正则表达式仍将var_dump返回为空。
编辑#3: 通过一些测试,我不得不在最后添加一些空格,以便从受影响的地方开始:&#34;受到影响:&#34;。如果你可以帮助使正则表达式更清洁,请这样做。
感谢您的帮助!