检查每一行到某个角色的最有效方法是什么

时间:2014-10-12 18:55:55

标签: php parsing

如果我将电子邮件发送到PHP脚本,并使用fgets遍历每一行,那么从From: To:和{{过滤掉值的最佳方法是什么? 1}}行?

我正在考虑在Subject:处爆炸每一行,然后检查:等等,但后来我爆炸了每一行,当时我应该只针对if ($result[0] === 'To')FromTo

在Google / SO搜索中,我找到Subject,但您需要指定要搜索的字符数,这对于我想要的每个值都是不同的。

3 个答案:

答案 0 :(得分:2)

有一个页面可以解析邮件标题 - 他们正在共享他们正在使用的正则表达式,所以也许你可以简单地获取你需要的部分:

http://mailheader.mattiasgeniar.be/headers.php

为您所需的字段建议的正则表达式是:

From     |^from:(.*)|mi 
To       |^to:(.*)|mi 
Subject  |^subject:(.*)|mi 

答案 1 :(得分:1)

你可以做点什么:

$finds = array('Subject:', 'From:', 'To:');
$founds = array();

$line = fgets(...); // whatever your logic is to get each line

foreach($finds as $key => $find){

    if (substr(trim($line), 0, strlen($find)) == $find){
        $founds[] = array($find, $line);
    }

} 

print_r($founds);  // you can explode (or whatever) the data as needed

这是未经测试的,我只是输入:)

答案 2 :(得分:1)

对于每个输入$line

,您可以使用正则表达式执行类似的操作
$matches = array();
$params = array();
if (preg_match('/^Subject: (.*)/', $line, $matches) == 1) {
    $params['subject'] = $matches[1];
} elseif (preg_match('/^From: (.*)/', $line, $matches) == 1) {
    $params['from'] = $matches[1];
} elseif (preg_match('/^To: (.*)/', $line, $matches) == 1) {
    $params['to'] = $matches[1];
}