PHP在特定正则表达式模式匹配后获取字符串

时间:2015-06-25 17:44:01

标签: php regex string email imap

我正在使用此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;。如果你可以帮助使正则表达式更清洁,请这样做。

感谢您的帮助!

0 个答案:

没有答案