Я использую шаблон регулярного выражения из этого потока SO: https://stackoverflow.com/a/11416262/
В тексте сообщения электронной почты может быть несколько сообщений электронной почты, поэтому я хочу получить электронное письмо после определенной строки:
The following users in your Google Apps domain appear to be affected: name@domain.com ....
Вот что я делаю:
$message = (imap_fetchbody($inbox,$email_number,1.2)); if($message == '') { $message = imap_fetchbody($inbox,$email_number,1); } // Text inside pattern can be made smaller too (ie from 'Google' to 'affected:') $pattern = '/(?<=The following users in your Google Apps domain appear to be affected: )\S+/i'; preg_match($pattern, $message, $match);
Когда я получаю вывод сообщения $ и проверяю шаблон на этом веб-сайте: http://www.phpliveregex.com/ Он работает (показывает электронную почту), но он не работает в моем коде.
var_dump ($ match) показывает
array (size=0) empty
Я хотел бы получить только электронную почту в теле и использовать ее позже.
Редактировать # 1:
if (preg_match('/affected:/',$message) echo 'true';
возвращает true, но это не так, если оно «/ затронуто: /» (с пробелом). Gettype $ message – это строка, но мне интересно, есть ли новые символы строк. Вот реальный адрес электронной почты: реальный образец электронной почты
Редактировать # 2: Извините за ввод в заблуждение / не предоставление реальной информации (моя первая работа с IMAP). Проблема заключалась в добавлении символов новой строки. Я закончил замену всех экземпляров новой строки на «». Теперь,
if (preg_match('/The following users in your Google Apps domain appear to be affected: /',$string)) echo 'true';
возвращает true, но мое большее регулярное выражение все равно возвращает var_dump как пустое.
Редактировать # 3: с небольшим тестированием мне пришлось добавить еще несколько пробелов в конец, чтобы перейти от «affected:» в «affected:». Если вы можете сделать регулярное выражение немного чище, сделайте это.
Спасибо вам за помощь!