我想让脚本搜索$ 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
?>
答案 0 :(得分:20)
尝试使用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
变量,如果未找到标题,则为空字符串。
答案 1 :(得分:8)
您可以使用preg_match代替strpos进行正则表达式
preg_match (regex, $string, $matches, PREG_OFFSET_CAPTURE);
PREG_OFFSET_CAPTURE gives you the position of match.