我试图剥离关键短语和结束标记之间的一切,但由于某种原因它不工作。我总是得到空白数据。我试过许多不同的方法,但都不成功。
基本上我有一个脚本连接到IMAP和存储电子邮件到MySQL作为服务票证。它的工作很好,但我试图剥离一切,除了用户回复,因为目前,如果一个用户回复电子邮件,它重新插入整个电子邮件到MySQL。我在所有外发邮件的顶部加了一个关键短语。
-
结构如下:
--Reply below this line to respond-- ------------------------------------------------------------------------------------ Email body message...
-
回复消息时变为:
New Message reply...... --Reply below this line to respond-- old message body.
-
我只想插入新的回复消息。
这是我目前得到的:
$message = strip_tags($message, "<br><div><p><u><hr></section>");
$message=preg_replace("</p>", "br /", $message);
$message=preg_replace('#--REPLY above this line to respond--(.*?)</section>)#s', ' ', $message);
$message=clean("<br/><hr><u>Received On $rep_date / $from_email</u><br><br/>$message");
插入Received On date和From,但$message
为空。
如果我将$message=preg_replace('#--REPLY
移到respond--(.*?)</section>)#s', ' ', $message);
,它将插入整个电子邮件。
有什么建议我做错了吗?
不需要正则表达式。在这种情况下,explode
应该可以找到。
// After cleaning the message...
$message_parts = explode("--Reply below this line to respond--", $message, 2);
$message = $message_parts[0];
如果您确实觉得需要使用正则表达式,您可以使用preg_split
而不是explosion。如果您需要区分大小写或其他类似的细节,使用正则表达式可能会更有帮助。
哈!您搜索"在本行上方回复",但消息中包含"在本行下方回复"。
如果你在搜索错误的字符串,你将永远无法匹配它。
下面是一个固定版本的例子:http://ideone.com/gL9awc
我们可以使用关键字和substr函数来提取您想要的信息:
$message = substr($message, strpos($message,'New Message'), strpos($message,'--Reply') );