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

2022-08-30 20:40:23

我想让脚本来搜索$open_email_msg,不同的电子邮件将具有不同的信息,但格式与下面相同。

我并没有真正使用正则表达式,但我想做的是,每当我有它来搜索字符串时,它就会搜索“标题:[标题数据]”,“类别:[类别数据]”。我问是因为我不认为这样的事情

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

甚至可以工作。

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

有人可以帮我找到解决这个问题的方法吗?

严格的电子邮件格式:

新闻更新
标题: 文章标题
标签: tag1 tag2
类别: 文章类别, 第二篇文章 类别
代码段: 文章代码段.
消息:文章消息。图像。更多文本,更多文本。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_match。像这样:PREG_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


答案 2

您可以使用preg_match而不是 strpos 作为正则表达式

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

PREG_OFFSET_CAPTURE gives you the position of match.

推荐