preg_match只返回'Array'?

时间:2013-04-25 15:53:26

标签: php

当使用此代码从http://www.ea.com/uk/football/profile/Calfreezy/360获取数据时,代码只是回显“Array”这个词

这是我目前正在使用的代码:

<?php

$content = file_get_contents("http://www.ea.com/uk/football/profile/Calfreezy/360");

preg_match('#<div class="stat">Titles Won<span>([0-9\.]*)<span class="sprite13 goalImage cup"></span></span>#', $content, $titleswon);

echo 'Titles Won: '.$titleswon.'';

?>

这是我试图从网址中提取的HTML:

<div class="stat">
                Titles Won                <span>0<span class="sprite13 goalImage cup"></span></span>
            </div>

这只是返回获胜的标题:数组

如果工作它应该返回标题赢了:0

我做错了什么,谢谢。

6 个答案:

答案 0 :(得分:2)

您正在打印整个匹配数组,而不是从中选择所需的索引并打印它们。

请参阅the documentation

  

如果提供了匹配,那么它将填充搜索结果。 $matches[0]将包含与完整模式匹配的文本,$matches[1]将具有与第一个捕获的带括号的子模式匹配的文本,依此类推。

答案 1 :(得分:2)

preg_match()生成一系列匹配项。如果在字符串上下文中打印出一个数组,则会得到Array作为文本。 e.g。

$arr = array('foo' => 'bar');

echo $arr; // prints "Array"
echo $arr['foo']; // prints "bar"

答案 2 :(得分:1)

preg_match可以看到

documentation返回一个数组。

如果要查看数组的所有内容,请使用

var_dump( $titleswon );

如果您只需要匹配,则必须解决该特定部分。

答案 3 :(得分:0)

最好的方法是:

if (preg_match('#<div class="stat">Titles Won<span>([0-9\.]*)<span class="sprite13 goalImage cup"></span></span>#', $content, $titleswon)) {
   echo 'Titles Won: '.$titleswon[1].'';
}

答案 4 :(得分:0)

第三个参数preg_match通过引用传递,并包含一个在每个捕获组中都有匹配的数组。您正在使用两个&#34;组&#34;。整场比赛和([0-9\.]*)将是第二场比赛。所以我希望你需要这个:

echo 'Titles Won: '.$titleswon[1].''; // note the array is indexed by 0

答案 5 :(得分:0)

如果您查看preg_match文档: http://php.net/manual/en/function.preg-match.php

你可以看到$ match参数实际上是一个数组,$ match [0]包含整个匹配,以及包含子查询的连续数组元素。

如果您var_dump($titleswon)print_r($titleswon),您会看到所有信息,那么您可以访问所需的信息,在您的情况下,$titleswon[1]