PHP获取特定单词或短语前后的文本

PHP获取特定单词或短语前后的文本,php,email,Php,Email,我有电子邮件进入邮箱,我正在使用PHP函数imap\u open获取电子邮件 每封电子邮件看起来都像: 您收到一条来自447***的新消息,表示感谢。:) 您可以回复此电子邮件,它将转换为短信! 如果您需要回复电子邮件或短信,请购买专用回复号码,或将默认发件人姓名设置为简单回复(设置->E2S) 在回复末尾键入##,以防止转换不需要的文本(例如签名、广告、免责声明、以前的回复文本)。 非常感谢Textlocal.com团队* 所以我想得到真正的信息。在上述示例中,消息为: Thank you :

我有电子邮件进入邮箱,我正在使用PHP函数
imap\u open
获取电子邮件

每封电子邮件看起来都像:

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

所以我想得到真正的信息。在上述示例中,消息为:

Thank you :)

如果不使用正则表达式,如何仅获取电子邮件的这一部分?

$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.
par1
par2
不是必需的,像

$text = explode(" You may reply", explode("saying ", $message)[1])[0];

在我这方面效果很好,但您的文本编辑器似乎在其中发现了语法错误,因此我更新了代码。

假设每条消息的前缀/后缀是恒定的字符数…(如您在问题中所述)

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

如果字符数不是恒定的,则必须首先使用
strpos()
查找消息所需部分的开始/结束位置,然后在上述代码中使用这些数字


好吧,我得测试一下,所以我最后数了数。行动路线是:

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

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

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

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

echo $string[1];

它返回Thank you:)。

您可以使用正则表达式:

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

echo $message;
在上面的正则表达式中,
\d{6}
应该与电话号码匹配。
6
需要相应地更改

产出:

Thank you. :)

仅此而已:)始终输出??我在dreamweaver中的代码第二行遇到错误,我在第2行遇到语法错误:)很公平。请看这里:我刚刚尝试了编辑并回显$text,但它没有显示任何内容。如果我显示$message(第一个变量)它显示整个电子邮件正文,但没有文本
Thank you. :)