#php #regex
#php #регулярное выражение
Вопрос:
Это строка, которая у меня есть:
--A683C6405E1.1403410842/server.abc.com
Content-Description: Delivery report
Content-Type: message/delivery-status
Reporting-MTA: dns; server.abc.com
X-Postfix-Queue-ID: A683C6405E1
X-Postfix-Sender: rfc822; bouncer@abc.com
Arrival-Date: Tue, 13 Jun 2012 00:03:28 -0400 (EDT)
Final-Recipient: rfc822; getthis@gmail.com
Action: failed
Status: 4.4.1
--A683C6405E1.1403410842/server.abc.com
Content-Description: Undelivered Message
Content-Type: message/rfc822
Content-Transfer-Encoding: 8bit
Return-Path:
Received: by server.abc.com (Postfix, from userid 517)
id A683C6405E1; Tue, 17 Jun 2014 00:03:28 -0400 (EDT)
Мне нужно извлечь Final-Recipient
из этой строки. Вывод должен быть getthis@gmail.com
.
Комментарии:
1. Вы можете использовать следующее регулярное выражение:
Final-Recipient:[^;] ;s*(S @S .S )
.2. приведенное выше регулярное выражение не работает. можете ли вы предложить мне еще раз?
Ответ №1:
Final-Recipient:s*RFC822;s*([w_. -] @[w-] .[w-.] )
или Final-Recipient:s*RFC822;s*(.*)
Первый также имеет средство проверки структуры почтового адреса, второй фиксирует все, что находится в конце строки. Я не знаю, какой почтовый адрес должен быть в конечном получателе — если может быть только правильный почтовый адрес, оба будут работать. Но если там также может быть неработающий почтовый адрес (например, abc@abc или *?= {gmail.com ), второе регулярное выражение будет тем самым.
Кстати, не забудьте установить для регулярного выражения значение нечувствительный (PHP: "/Final-Recipient:s ?RFC822;s ?(.*)/i"
). Я предполагаю, что RFC может быть как в верхнем, так и в нижнем регистре.