Использование регулярного выражения в строке для 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
?>
Ответы
Ответ 1
Попробуйте использовать флаг 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
и пустую строку, если название не было найдено.
Ответ 2
Вы можете использовать preg_match вместо strpos для regex
preg_match (regex, $string, $matches, PREG_OFFSET_CAPTURE);
PREG_OFFSET_CAPTURE gives you the position of match.