preg_match问题

时间:2011-01-24 03:14:16

标签: php regex

我正在制作一个从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

3 个答案:

答案 0 :(得分:2)

出现此错误的原因是preg_match期望其第一个参数(模式)包含在一对分隔符中/the pattern/

所以改变:

preg_match($date, $story)

preg_match('!'.preg_quote($date).'!', $story)

此外,您似乎正在使用preg_match来搜索另一个字符串中的字符串。最好使用strposstrstr这样的字符串搜索功能:

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];
}