Я хочу получить скрипты для поиска $ open_email_msg, которые разные электронные письма будут иметь разную информацию, но в том же формате, что и ниже.
Я не очень часто использовал regex, но то, что я хочу сделать, – это всякий раз, когда я должен искать строку, в которой он будет искать «Title: [data for title]», «Категории: [данные для категорий]. потому что я не думаю, что-то вроде
strpos($open_email_msg, "Title: (*^)");
будет даже работать.
Это всего лишь фрагмент всего кода, а остальные вставляют информацию в таблицу MySQL, а затем отправляются в статью новостей на сайте.
Может ли кто-нибудь помочь мне найти решение этого, пожалуйста?
Строгий формат сообщений электронной почты:
Обновление новостей
Название: Заголовок статьи
Теги: tag1 tag2
Категории: Категория статьи, Категория 2-й статьи
Фрагмент: фрагмент статьи.
Сообщение: Сообщение статьи. Изображений. Больше текста, больше текста. Lorem impsum dolor сидит amet.
<?php //These functions searches the open e-mail for the the prefix defining strings. //Need a function to search after the space after the strings because the subject, categories, snippet, tags and message are constant-changing. $subject = strpos($open_email_msg, "Title:"); //Searches the open e-mail for the string "Title" $subject = str_replace("Title: ", "" ,$subject); $categories = strpos($open_email_msg, "Categories:"); //Searches the open e-mail for the string "Categories" $snippet = strpos($open_email_msg,"Snippet"); //Searches the open e-mail for the string "Snippet" $content = strpos($open_email_msg, "Message"); //Searches the open-email for the string "Message" $tags = str_replace(' ',',',$subject); //DDIE $uri = str_replace(' ','-',$subject); //DDIE $when = strtotime("now"); //date article was posted ?>
Попробуйте использовать флаг PREG_OFFSET_CAPTURE
для preg_match
. Что-то вроде этого:
preg_match('/Title: .*/', $open_email_msg, $matches, PREG_OFFSET_CAPTURE); echo $matches[0][1];
Это должно дать вам начальную позицию строки.
Обратите внимание, что регулярное выражение, которое я использую, может быть неправильным и не учитывать окончание строк и прочее, но это другой вопрос. 🙂
ИЗМЕНИТЬ . Лучшее решение для того, что вы хотите (если я правильно понимаю), будет примерно таким:
$title = preg_match('/Title: (.*)/', $open_email_msg, $matches) ? $matches[1] : '';
Затем вы получите заголовок в переменную $title
и пустую строку, если название не было найдено.
Вы можете использовать preg_match вместо strpos для regex
preg_match (regex, $string, $matches, PREG_OFFSET_CAPTURE); PREG_OFFSET_CAPTURE gives you the position of match.