如何使用 PHP 查找模式第一次出现的位置

How to find the position of the first occurrence of a pattern using PHP

我正在尝试找出一种解析电子邮件的方法。

我无法弄清楚如何搜索第一次出现的这种格式的文本

> On Mar 12, 2015, at 7:47 AM, Mike G <email@yourdomain.com> wrote:

文本将以 > On 开头并以 wrote:

结尾

On Mar 12, 2015, at 7:47 AM, Mike G wrote:

如何在 PHP 中找到它?

我可以

   $msg = strpos($msg, '> On'); // to get the first position
   $msg = strstr($msg, '> On', true); // with PHP 5.3+ to get the text prior the first '> On '  

但我需要寻找类似的模式线才能更准确。

我试过这段代码:

$matches = '';
$pattern = "/ On*<[a-zA-Z0-9._-]@[a-zA-Z0-9._-]> wrote:/";

preg_match($pattern, $msg, $matches);
$msg = strstr($msg, $matches, true);

但我没有在文本中找到任何结果。

我认为应该这样做。如果空格是可选的,请将 s+ 更改为 s*.

preg_match('~>\s+.*?<([^>]*)>\s+wrote:~', '> On Mar 12, 2015, at 7:47 AM, Mike G <email@yourdomain.com> wrote:', $email);
echo $email[1];

如果您想要更安全并且还需要 'On'...

preg_match('~>\s+On.*?<([^>]*)>\s+wrote:~', '> On Mar 12, 2015, at 7:47 AM, Mike G <email@yourdomain.com> wrote:', $email);