Как извлечь имя встроенного вложения из этого письма? - PullRequest
1 голос
/ 12 июня 2009

Мой навык регулярных выражений ... плохой. У меня есть это тело электронной почты.

Hello World

[cid:image002.png@01C9DEDD.67C237D0]

Hello World

[cid:image002.png@01C9DEDD.67C237D0] [cid:image002.png@01C9DEDD.67C237D0]

Hello World

А мне нужен массив имен файлов.

<code>preg_match_all("/\[cid:(.*)\@/", $string, $matches);

echo "<pre>";
    print_r($matches);
echo "
";

И я получаю первое имя файла в порядке. Но не 2-й и 3-й.

[0] => image002.png
[1] => image002.png@01C9DEDD.67C237D0] [cid:image002.png

Как я могу изменить это регулярное выражение, чтобы оно работало для любого встроенного файла в теле письма?

Ответы [ 3 ]

5 голосов
/ 12 июня 2009

Я думаю, вы можете просто изменить выражение на это:

"/\[cid:(.*?)\@/"

Чтобы сделать матч не жадным.

Вот пара инструментов, которые вы можете использовать для проверки своих выражений:

0 голосов
/ 12 июня 2009

Обратите внимание, что если у вас есть вся электронная почта (заголовки и все), вы получите более согласованные результаты, извлекая имена файлов из заголовков электронной почты, а не из тела (формат которого сильно зависит от цепочки почтового программного обеспечения, которое электронное письмо прошло до того, как оно дошло до вас).

Прочтите MIME, составные сообщения и заголовки MIME, чтобы узнать, как это сделать: http://en.wikipedia.org/wiki/Multipart_message#MIME_headers

0 голосов
/ 12 июня 2009

Попробуйте:

preg_match_all("/\[cid:([^@]*)/", $string, $matches);

РЕДАКТИРОВАТЬ: оригинальный пост был ошибка - извинения! Я пытался неправильно замкнуть жадность.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...