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

时间:2011-12-22 21:11:55

标签: php regex strpos

我想让脚本搜索$ 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 个答案:

答案 0 :(得分:20)

尝试使用preg_matchPREG_OFFSET_CAPTURE标记。像这样:

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变量,如果未找到标题,则为空字符串。

答案 1 :(得分:8)

您可以使用preg_match代替strpos进行正则表达式

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

PREG_OFFSET_CAPTURE gives you the position of match.