Я хочу получить сценарии для поиска в $ open_email_msg, в которых разные электронные письма будут иметь разную информацию, но в том же формате, что и ниже.
На самом деле я нечасто использовал регулярные выражения, но я хочу каждый раз, когда он у меня есть, искать строку, которая будет искать «Заголовок: [данные для заголовка]», «Категории: [данные для категорий]. Я спрашиваю, потому что не думаю, что что-то вроде
strpos($open_email_msg, "Title: (*^)");
вообще сработает.
Это всего лишь фрагмент всего кода, остальное вставляет информацию в таблицу MySQL, а затем публикуется в статье новостей на сайт.
Может кто-нибудь помочь мне найти решение этой проблемы?
Строгий формат сообщения электронной почты:
News Update
Заголовок: Название статьи
Теги: tag1 tag2
Категории: Категория статьи, Вторая категория статьи
Фрагмент: Фрагмент статьи.
Сообщение: Сообщение статьи. Изображений. Больше текста, больше текста. Lorem impsum dolor sit 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
и пустую строку, если заголовок отсутствует. был найден.