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

时间:2015-03-12 22:35:07

标签: php regex preg-match

我正试图找出解析电子邮件的方法。

我一直试图找出如何搜索第一次出现的格式为

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

文本将以> On开头,以write:

结尾
  

2015年3月12日上午7:47,Mike G写道:

如何在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);

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

1 个答案:

答案 0 :(得分:1)

我认为应该这样做。如果空格是可选的,请将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];

如果您想要更安全并且还需要“开启”......

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