Использование регулярного выражения в строке для strpos ()

Я хочу получить скрипты для поиска $ 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.