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

Я хочу получить сценарии для поиска в $ 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
?>
17
задан cambraca 22 December 2011 в 21:20
поделиться

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 и пустую строку, если заголовок отсутствует. был найден.

21
ответ дан 30 November 2019 в 12:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: