Мне нужно проанализировать (разделить) текстовый файл, содержащий электронные письма, экспортированные из Outlook. Я разделяю его, используя preg_split
с PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE
Моя цель - захватить раздел заголовка сообщения с регулярным выражением, т.е. начиная со строки «От:» и заканчивая пустой строкой перед телом сообщения.
Ограничения:
- Ожидаются многоязычные имена полей
- Количество полей заголовка варьируется (CC, BCC, вложения)
- Некоторые поля могут располагаться более чем в одной строке (Кому, Копия, Скрытая копия, Тема, Вложения)
текстовый файл предварительно обрабатывается: замените несколько пробелов и табуляции одним пробелом, замените начальные и конечные пробелы.
Я был на этом весь день, не могу заставить последнюю часть работать. Это работает на [странице тестирования регулярных выражений gskinner]: http://regexr.com?36v27, но не в php .
Предмет:
From: Black, Jack (LA)
Sent: Monday, October 28, 2013 6:36 PM
To: George, Jackson (London); DCS.CC.DARWIN (Australia)
Cc: Bar, Foo (Istanbul); Ex, Reg (Istanbul); Smith, John (Istanbul); Rambo,
John J. (Gaziantep); Matrix, John (Phuket)
Subject: RE: PREVENTIVE AND CORRECTIVE ACTIONS / FOOBAR
Dear George,
venenatis imperdiet quam. Proin a egestas nunc, et mattis elit. In hac habitasse platea dictumst. Nulla dolor nibh, tempus ut neque eu, tempus fermentum mauris. Mauris nec ipsum nec sapien commodo scelerisque ut eu urna. Pellentesque eu neque in enim adipiscing faucibus. Sed interdum arcu et sem mollis iaculis. Duis euismod laoreet ligula lacinia dapibus. Vestibulum ullamcorper malesuada metus at malesuada.
Nullam enim elit, auctor vehicula orci eget, imperdiet feugiat odio. Etiam dapibus sagittis sem a varius. Nulla sit amet convallis mi, sit amet rutrum ipsum. In libero lectus, mattis at dui eu.
Thank you and best regards,
Jack B. Black (Mr)
Operations Manager (GGD)
FU Supervisor (R34, R57)
Phone: +1112212212 (local 1111)
Mobile: +12 121.111.11.12
From: George, Jackson (UK)
Sent: Monday, October 28, 2013 5:57 PM
To: DCS.CC.DARWIN (Australia)
Bar, Foo (Istanbul); Ex, Reg (Istanbul); Smith, John (Istanbul); Rambo,
John J. (Gaziantep); Matrix, John (Phuket)
Subject: PREVENTIVE AND CORRECTIVE ACTIONS / FOOBAR
Dear Colleagues,
ermentum. Duis ipsum quam, bibendum a risus nec, tincidunt fringilla lectus. Nunc vel dictum massa, et cursus nunc. Mauris tincidunt felis eget justo congue volutpat. Nulla condimentum accumsan elementum. Integer commodo, lorem eu pharetra suscipit, ligula.
Best Regards.
SDFD srfgGD
Field coordinator (GGD)
Customer Representative
sds dfsd sdfgsef sdfsd
sgzdfgdfg fgfg gdfg
Footer text etc
sdfdfdf dfgsdfgsdfgsdfg
Phone : +90 212 368 40 00 (ext:3814)
Регулярное выражение:
preg_match(
'/ # delimiter
( # capturing group start
[\ A-Z][a-z]+:.+\(.+\)\R # From: field
[A-Z][a-z]+:.+\R # Sent: fields
[A-Z][a-z]+:.+\R # To: field (1st line)
(?:.+\R)+ # any additional header lines, before blank line (To, CC, BCC, Subject, Attachments)
) # capturing group end
# delimiter + modifiers /x',$text_clean, $matches);
echo '<b>Matches: '.count($matches).'</b>';
print_r($matches);
У меня проблема с получением дополнительных строк заголовка:
(?:.+\R)+ # any additional header lines...
Любая помощь приветствуется