我正在制作一个从RSS源收集信息的计划系统。但是,当我尝试从RSS中删除必要的段时,preg_match将其返回为无效。
//Finds the day by stripping data from the myDragonnet RSS feed.
function schedule($given_date) {
$url = "http://mydragonnet.hkis.edu.hk/schedule/day_schedule_rss.php?schedule_id=1";
$rss = simplexml_load_file($url);
$date = date("~jS M Y~", strtotime($given_date));
if($rss) {
foreach($rss->channel->item as $item) {
foreach ($item->title as $story) {
if (strpos($date, $story) !== false) {
preg_match("/Day (\d+)/", $story, $m);
break; // stop searching
}
}
}
}
return $m[1];
}
功能:<?php echo schedule('01/24/2010'); ?>
这是我得到的错误 -
Warning: preg_match() [function.preg-match]: Unknown modifier '/' in ***/class.schedule.php on line 31
答案 0 :(得分:2)
出现此错误的原因是preg_match
期望其第一个参数(模式)包含在一对分隔符中/the pattern/
所以改变:
preg_match($date, $story)
到
preg_match('!'.preg_quote($date).'!', $story)
此外,您似乎正在使用preg_match
来搜索另一个字符串中的字符串。最好使用strpos
或strstr
这样的字符串搜索功能:
if (strpos($date, $story) === false)
continue;
您可以将foreach
循环重写为
foreach ($item->title as $story) {
if (strpos($date, $story) !== false) {
echo $story;
break; // stop searching
}
}
答案 1 :(得分:1)
为什么不使用strstr()
而不是preg_match。它快得多! (Documentation)
答案 2 :(得分:1)
试试这个:
// Finds the day by stripping data from the myDragonnet RSS feed.
function schedule($given_date) {
$url = "http://mydragonnet.hkis.edu.hk/schedule/day_schedule_rss.php?schedule_id=1";
$rss = simplexml_load_file($url);
$date = date("jS M Y", strtotime($given_date));
$found = false;
if($rss) {
foreach($rss->channel->item as $item) {
foreach ($item->title as $story) {
if (strpos($story, $date) !== false) {
if (preg_match('/Day (\d+)/i', $story, $m)) {
$found = true;
break; // stop searching
}
}
}
if ($found)
{
break;
}
}
}
return $m[1];
}