在strpos()的字符串中使用正则表达式

bri*_*ing 17 php regex strpos

我想获取脚本来搜索$ open_email_msg,不同的电子邮件将有不同的信息,但格式如下.

我还没有真正使用正则表达式,但我想要做的是每当我有它搜索字符串时它会搜索"标题:[标题数据]","类别:[类别数据].我在问因为我觉得不像

strpos($open_email_msg, "Title: (*^)"); 
Run Code Online (Sandbox Code Playgroud)

甚至会工作.

这只是整个代码的片段,其余部分将信息插入MySQL表中,然后发布到网站上的新闻文章中.

有人可以帮我找到解决方案吗?

严格的电子邮件格式:

新闻更新
标题:文章标题
标签:tag1 tag2
类别:文章类别,第2文章类别
片段:文章片段.
消息:文章消息.图片.更多文字,更多文字.Lorem impsum dolor坐着.

<?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
?>
Run Code Online (Sandbox Code Playgroud)

cam*_*aca 21

尝试使用PREG_OFFSET_CAPTURE标志preg_match.像这样的东西:

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

这应该给你字符串的初始位置.

请注意,我正在使用的正则表达式可能是错误的,并没有考虑行结尾和东西,但这是另一个主题.:)

编辑.你想要的更好的解决方案(如果我理解正确)将是这样的:

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

然后,您将获得标题到$title变量,如果没有找到标题,则为空字符串.


小智 8

您可以使用preg_match而不是strpos来进行正则表达式

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

PREG_OFFSET_CAPTURE gives you the position of match.
Run Code Online (Sandbox Code Playgroud)