如何删除关键短语和结束标记之间的所有内容?

时间:2014-06-11 15:15:26

标签: php regex

我试图在关键短语和结束标记之间删除所有内容但由于某种原因它无效。我总是得到空白数据。我尝试了很多不同的方法,但没有运气。

基本上我有一个脚本连接到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. 我只想插入新的回复邮件。

  4. 这是我到目前为止所得到的:

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

    它会插入已接收日期和发件人,但$message为空白。

    如果我将此行上方的$message=preg_replace('#--REPLY移至respond--(.*?)</section>)#s', ' ', $message);,则会插入整个电子邮件。

    关于我做错了什么的任何建议?

2 个答案:

答案 0 :(得分:1)

不需要正则表达式。 explode应该可以在这种情况下找到。

// After cleaning the message...
$message_parts = explode("--Reply below this line to respond--", $message, 2);
$message = $message_parts[0];

如果您确实需要使用正则表达式,则可以使用preg_split而不是爆炸。如果您需要不区分大小写或其他此类细节,则使用正则表达式可能会更有帮助。

编辑哈!您搜索&#34;回复以上此行&#34;,但该消息包含&#34;回复以下此行&#34;。
如果您正在搜索错误的字符串,那么您永远不会匹配它。

以下是固定版本的示例:http://ideone.com/gL9awc

答案 1 :(得分:0)

嗯,我们可以使用关键字和substr函数来提取您想要的信息:

$message = substr($message, strpos($message,'New Message'), strpos($message,'--Reply') );