удалить текст до и после текста, который я хочу — PHP

#php

#php

Вопрос:

вот мой пример текста

 ------=_Part_564200_22135560.1319730112436
Content-Type: text/plain; charset=utf-8; name=text_0.txt
Content-Transfer-Encoding: 7bit
Content-ID: <314>
Content-Location: text_0.txt
Content-Disposition: inline

I hate u
------=_Part_564200_22135560.1319730112436
Content-Type: image/gif; name=dottedline350.gif
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename=dottedline350.gif
Content-ID: <dottedline350.gif>
 

Мне нужно уметь извлекать «Я ненавижу тебя».

Я знаю, что могу использовать explode для удаления последней части после сообщения, выполнив

 $body_content = garbled crap above;
$message_short = explode("------=_",$body_content);
echo $message_short;
 

но мне нужно удалить первую часть вместе с последней частью.

Итак, описанная выше функция разнесения делает то, что мне нужно, чтобы удалить конец, теперь мне нужно что-то, что говорит

НАЙДИТЕ ‘Content-Disposition: inline’ и удалите вместе со всем, что есть, прежде чем НАЙТИ ‘——=_’ и удалите вместе со всем, что после этого останется = $message_short

echo $message_short;

будет выглядеть так

Я ненавижу тебя

Любая помощь будет признательна.


Спасибо @Marcus

Это код, который у меня сейчас есть, и он прекрасно работает.

 $body_content2 = imap_qprint(imap_body($gminbox, $email_number));
$body_content2 = strip_tags ($body_content2);    
$tmobile_body = explode("------=_", $body_content2);
$tmobile_body_short = explode("Content-Disposition: inline", $tmobile_body[1]);
$tmobile_body_complete1 = trim($tmobile_body_short[1]);
$tmobile_body_complete2 = explode("T-Mobile", $tmobile_body_complete1);
$tmobile_body_complete3 = trim($tmobile_body_complete2[1]);
 

Комментарии:

1. Я тоже тебя ненавижу. Но вы можете использовать для этого регулярное выражение и preg_match вместо fiddly explode . Но, может быть, у вас есть полный большой двоичный объект? Тогда было бы проще с PEAR mimeDecode .

2. вы можете попробовать strstr для двойной новой строки.

Ответ №1:

Если вы хотите сделать это с помощью explode и explode в «Content-Disposition: inline», вот как вы можете это сделать:

 $message_short = explode("------=_", $body_content);
$message_shorter = explode("Content-Disposition: inline", $message_short[1]);
$content = trim($message_shorter[1]);
// $content == I hate you
 

Обратите внимание, что для этого требуется, чтобы последняя строка была Content-Disposition: inline

Если вы хотите решить проблему с помощью регулярных выражений и использовать двойной разрыв строки в качестве разделителя, вот для вас codesnippet:

 $pattern = '/(?<=------=_Part_564200_22135560.1319730112436)(?:.*?sss)(.*?)(?=------=_Part_564200_22135560.1319730112436)/is';
preg_match_all($pattern, $body_content, $matches);

echo($matches[1][0]);
 

Вывод:

 I hate you
 

Вот ссылка на codepad с образцом текста.

Комментарии:

1. Спасибо, Маркус, именно то, что я искал.

2. спасибо, исправил мой основной пост, чтобы показать код, который я использовал, работал отлично.