preg_match 대신 preg_replace를 사용하여이 코드를 줄일 수 있습니까?이 코드를 더 짧게 만들 수 있습니까?
이메일 본문에서 인용 된 텍스트를 삭제하는 데 사용하고 있습니다. 이메일에 회신 할 때 누군가를 인용 할 때 따옴표 붙은 텍스트가 표시됩니다.
# Get rid of any quoted text in the email body
# stripSignature removes signatures from the email
# $body is the body of an email (All headers removed)
$body_array = explode("\n", $this->stripSignature($body));
$new_body = "";
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 {
$new_body .= "$value\n";
}
}
이 거의 작동하지만,이 첫 번째 줄 유지 "10:54 PM에 2012년 7월 30일 (월) 켜기, 사람 이름 썼다 :"
$body = preg_replace('/(^\w.+:\n)?(^>.*(\n|$))+/mi', "", $body);
다른 답변이 없습니까? =/ – Draven