Php 从文本(字符串)中提取数据

Php 从文本(字符串)中提取数据,php,extract,Php,Extract,我正在使用email2http发布到我的状态文件中 当我收到邮件并将其发布到我的状态文件时,我需要提取一些数据并将它们分配给一些值 我是说,我做的 <?php $body = $_POST['body']; function plog($errorMsg) { $filename = "email.txt"; if ($handle = fopen($filename, 'a+')) { if (fwrite($handle, $errorMs

我正在使用email2http发布到我的状态文件中

当我收到邮件并将其发布到我的状态文件时,我需要提取一些数据并将它们分配给一些值

我是说,我做的

<?php
$body = $_POST['body'];

function plog($errorMsg)
{
    $filename = "email.txt";
    if ($handle = fopen($filename, 'a+')) {
    if (fwrite($handle, $errorMsg) === FALSE) {
        echo "Cannot write to file ($filename)";
    }
}
else {
    echo "Cannot open file ($filename)";
}
fclose($handle);
}
$msgBody .= "$body\r\n";
plog($msgBody."\r\n");
?>

$\u POST['body']
包含从邮件发送的文本

假设所有邮件都是这种类型:

5美元已存入您的账户。 备注:购物车付款。交换ID:1317。日期:23:07 25.07.13。批号:28808853

所以我想得到这些变量:

$amout=5

$id=1317

$date=23:07 25.07.13

$batch=28808853


我认为你可以尝试提取数据,如果邮件都是一样的

例如:

$var = explode('amount of ', $_POST['body']);
$var2 = explode('USD', $var[1]);
$amount = $var2[0];

如果$body变量始终具有该结构,则可以使用正则表达式:

我建议删除\r\n

$body=str_replace(array("\r", "\n"), "", $body);
if(preg_match("/amount\sof\s(\d+)\s.*?Exchange\sID\s?:\s?(\d+?).*?Date:\s(\d{2}:\d{2}\s\d{2}\.\d{2}\.\d{2}).*?Batch:\s(\d+?)\./"), $body, $hits){
    print_r($hits);
}

看起来非常感谢,我更喜欢这种方法!我保存了变量!我尝试使用这种方法时出错了!我不知道为什么,我用了爆炸法!