preg_match没有返回任何值?

时间:2010-12-16 06:31:55

标签: php regex preg-match

您好  我正在使用preg_match匹配字符串中的模式并进一步解析它们..但它没有返回任何值..

实际上,我正在使用它来查看标题信息来获取视频。

$url = "http://www.youtube.com/watch?v=".$video_id;
$this->req =& new HTTP_Request($url);
$response = $this->req->sendRequest();
$rescode  = $this->req->getResponseCode();

echo "++response code++$rescode";
echo "***$response***";

if (PEAR::isError($response)) {
    echo "<b>Please check whether the video added or not </b>";
} else {    
            $page = $this->req->getResponseBody();  
//          echo "=====$page====";
            preg_match('/"videoplayback": "(.*?)"/', $page, $match);
                        $var_id = $match[1];
            echo "+++$var_id+++;
}

如果用以下代码替换preg_match,所有工作正常,但这不是我需要的..

preg_match('/"video_id": "(.*?)"/', $page, $match);

我想要匹配的字符串是

  

http://v17.lscache6.c.youtube.com/videoplayback?ip=0.0.0.0&sparams=id%2Cexpire%2Cip%2Cipbits%2Citag%2Calgorithm%2Cburst%2Cfactor%2Coc%3AU0dYR1RMVl9FSkNNOF9MRlpB&fexp=906320&algorithm=throttle-factor&itag=34&ipbits=0&burst=40&sver=3&expire=1292418000&key=yt1&signature=32DD3C5BF016489B43D15493F68ACCDE2AA720B5.95F66ACBE6FDFBC60978A14075A28020E083E8A8&factor=1.25&id=39743a9fde40b0dd&

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

如果你需要的只是检查$ page中是否存在“videoplayback”,那么你不能只使用:

if (preg_match("/.*videoplayback.*/", $page){
    // use the whole $page url
}

不需要捕获任何内部匹配组件,对吧?

您可能希望使用更严格的模式:

$pattern = "/.*youtube\.com\/videoplayback\?.*/";

只是抛弃想法。希望能帮助到你。

答案 1 :(得分:0)

你试过吗

preg_match('/\"videoplayback\"\:\s\"(.*)\"/iU', $page, $match);

如果它不起作用也试试

preg_match('/\"videoplayback\"\:\s\"([^\"]*)\"/iU', $page, $match);