【发布时间】:2015-07-06 16:16:09
【问题描述】:
请看下面的代码:
来自:http://www.damnsemicolon.com/php/php-parse-email-body-email-piping
//get rid of any quoted text in the email body
$body_array = explode("\n",$body);
$message = "";
foreach($body_array as $key => $value){
//remove hotmail sig
if($value == "_________________________________________________________________"){
break;
//original message quote
} elseif(preg_match("/^-*(.*)Original Message(.*)-*/i",$value,$matches)){
break;
//check for date wrote string
} elseif(preg_match("/^On(.*)wrote:(.*)/i",$value,$matches)) {
break;
//check for From Name email section
} elseif(preg_match("/^On(.*)$fromName(.*)/i",$value,$matches)) {
break;
//check for To Name email section
} elseif(preg_match("/^On(.*)$toName(.*)/i",$value,$matches)) {
break;
//check for To Email email section
} elseif(preg_match("/^(.*)$toEmail(.*)wrote:(.*)/i",$value,$matches)) {
break;
//check for From Email email section
} elseif(preg_match("/^(.*)$fromEmail(.*)wrote:(.*)/i",$value,$matches)) {
break;
//check for quoted ">" section
} elseif(preg_match("/^>(.*)/i",$value,$matches)){
break;
//check for date wrote string with dashes
} elseif(preg_match("/^---(.*)On(.*)wrote:(.*)/i",$value,$matches)){
break;
//add line to body
} else {
$message .= "$value\n";
}
}
//compare before and after
echo "$body<br><br><br>$message";
$body 包含完整的电子邮件正文,如果这是回复,则包括引用区域,此循环删除引用区域以获取新的回复作为 $message。但正如那里所建议的那样,循环速度很慢,最好使用 preg_replace 代替。那我该怎么办?
用什么替换模式?我也应该删除 foreach 循环吗?我在下面创建了没有 foreach 循环但似乎错了?请指教。
$patterns = array(
"_________________________________________________________________",
"/^-*(.*)Original Message(.*)-*/i",
"/^On(.*)wrote:(.*)/i",
"/^On(.*)$fromName(.*)/i",
"/^On(.*)$toName(.*)/i",
"/^(.*)$toEmail(.*)wrote:(.*)/i",
"/^(.*)$fromEmail(.*)wrote:(.*)/i",
"/^>(.*)/i",
"/^---(.*)On(.*)wrote:(.*)/i");
$message = preg_replace($patterns, '', $body);
【问题讨论】:
-
您至少需要
/m多行修饰符才能使它们在逐行 foreach 之外工作。否则用具体示例和错误消息解释它是如何不起作用的。 -
能否请您用 preg_replace 而不是 preg_match 重写该链接上的代码块,这样我可以更好地理解它?
-
下次把代码加到你的问题中,不要链接。
-
嗯,这么有用的答案我总是在 stackoverflow 上得到!
-
是否有人在 stackoverflow 上提供有用的建议,而不是上面无意义/无用的垃圾邮件/cmets?
标签: php regex preg-replace preg-match pcre