如何去掉关键短语和结束标签之间的所有内容


How to strip everything between a key phrase and an ending tag?

我试图剥离关键短语和结束标记之间的一切,但由于某种原因它不工作。我总是得到空白数据。我试过许多不同的方法,但都不成功。

基本上我有一个脚本连接到IMAP和存储电子邮件到MySQL作为服务票证。它的工作很好,但我试图剥离一切,除了用户回复,因为目前,如果一个用户回复电子邮件,它重新插入整个电子邮件到MySQL。我在所有外发邮件的顶部加了一个关键短语。

  1. 结构如下:

     --Reply below this line to respond--
     ------------------------------------------------------------------------------------
    Email body message...
    
  2. 回复消息时变为:

    New Message reply......
    --Reply below this line to respond--
    old message body.
    
  3. 我只想插入新的回复消息。

这是我目前得到的:

$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') );