PHP在某个单词或短语之前和之后获取文本

时间:2013-11-25 16:03:47

标签: php email

我有电子邮件进入邮箱,我使用PHP函数imap_open来收发邮件。

每封电子邮件都是:

您有来自447的新消息 * ** 说谢谢。 :) 您可以回复此电子邮件,它将被转换为SMS短信! 如果您需要回复电子邮件回复短信,请购买专用的回复号码,或将您的默认sendername设置为简单回复(设置 - > E2S) 在回复结尾处键入##以防止不需要的文本被转换(例如签名,广告,免责声明,以前的回复文本)。 非常感谢Textlocal.com团队。*

所以我想得到实际的消息。在上面的例子中,消息是:

Thank you :)

我怎样才能获得这部分电子邮件?

4 个答案:

答案 0 :(得分:1)

假设每封邮件的前缀/后缀是一个固定数量的字符...... (正如您在问题中所述)

这是一个q& d答案,所以我不会计算两个字符串中字符的确切数量。假设要剥离的第一个字符串中有10个字符,第二个字符串中有150个字符。中间的字符是你的信息:

$msg = 'You have a new message from 447*** saying Thank you. :) You may reply to this email and it will be converted into an SMS text message! If you need replies back to your email to SMS messages then either purchase a dedicated reply number, or set your default sendername to Simple Replies (Settings->E2S) Type ## at the end of the reply to prevent unwanted text being converted (e.g. signature, advert, disclaimers, previous reply text). Many thanks, the Textlocal.com team.*';

$msg = substr(substr($msg, 0, -150),10);

echo $msg;

如果字符数不是常数,那么您必须先使用strpos()找到消息所需部分开始/结束的位置,然后在上面的代码中使用这些数字。


好的,我必须测试一下,所以我最终计算了它们。操作线是:

$msg = substr(substr($msg, 0, -417), 42);

答案 1 :(得分:0)

不使用正则表达式:

$message = "You have a new message..."; // this is the message you receive.

$par1 = explode("saying ", $message); // temp variable

$par2 = explode(" You may reply", $par1[1]); // another temp variable

$text = $par2[0]; // this is the text you wanted to get.

par1par2不是必需的,像

这样的单行内容
$text = explode(" You may reply", explode("saying ", $message)[1])[0];

在我这边工作正常,但看起来你的文本编辑器在某处发现了语法错误,所以我更新了我的代码。

答案 2 :(得分:0)

可以使用双引号(“)或任何其他符号来转义消息。这使得解析更容易。例如:

$string = 'You have a new message from 447*** saying "Thank you. :)" You may reply...';

$string = explode('"', $string);

echo $string[1];

它返回谢谢:)。

答案 3 :(得分:0)

您可以使用正则表达式:

$pattern = '~message from \d{6} saying (.*) You may~';
if(preg_match($pattern, $text, $matches)) {
    $message = $matches[1];
}

echo $message;

在上述正则表达式中,\d{6}应该与电话号码匹配。 6需要相应更改。

输出:

Thank you. :)

Online demo.