Использование регулярного выражения в строке для strpos () - PullRequest
17 голосов
/ 23 декабря 2011

Я хочу получить скрипты для поиска в $ open_email_msg, в которых разные электронные письма будут иметь разную информацию, но в том же формате, что и ниже.

На самом деле я не очень часто использовал регулярные выражения, но я хочу, чтобы всякий раз, когда у меня было это для поиска строки, он выполнял поиск "Заголовок: [данные для заголовка]", "Категории: [данные для категорий]. Я спрашиваю, потому что я не думаю, что-то вроде

strpos($open_email_msg, "Title: (*^)"); 

будет даже работать.

Это всего лишь фрагмент всего кода, остальные вставляют информацию в таблицу MySQL и затем публикуются в новостной статье на сайте.

Может кто-нибудь помочь мне найти решение, пожалуйста?

Строгий формат сообщения электронной почты:

Обновление новостей
Заголовок: Заголовок статьи
Теги: tag1 tag2
Категории: Категория статьи, 2-я категория статьи
Фрагмент: Фрагмент статьи.
Сообщение: Статья Сообщение. Изображений. Больше текста, больше текста. 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
?>

Ответы [ 2 ]

20 голосов
/ 23 декабря 2011

Попробуйте использовать флаг PREG_OFFSET_CAPTURE для preg_match. Как то так:

preg_match('/Title: .*/', $open_email_msg, $matches, PREG_OFFSET_CAPTURE);
echo $matches[0][1];

Это должно дать вам начальную позицию строки.

Обратите внимание, что регулярное выражение, которое я использую, может быть неправильным и не принимать во внимание окончания строк и прочее, но это другая тема. :)

EDIT . Лучшее решение для того, что вы хотите (если я правильно понимаю) было бы что-то вроде этого:

$title = preg_match('/Title: (.*)/', $open_email_msg, $matches) ? $matches[1] : '';

Затем вы получите заголовок в переменной $title и пустую строку, если заголовок не найден.

8 голосов
/ 23 декабря 2011

Вы можете использовать preg_match вместо strpos для регулярных выражений

preg_match (regex, $string, $matches, PREG_OFFSET_CAPTURE);

PREG_OFFSET_CAPTURE gives you the position of match.
...