为什么我的preg_match结果加倍?

时间:2011-12-05 23:30:11

标签: php

慢慢地,但肯定的是,我正在组建一个供个人使用的网站,在那里我搜索电影的名称并且它返回了它的元音评级。这是我到目前为止所得到的:

$web = file_get_contents("http://www.metacritic.com/movie/the-lion-king"); 

preg_match(
    '/<span class="score_value" property="v:average">(.*?)<\/span>/s',
    $web,
    $match
 );

foreach ($match as $score) {
    $sc = $score;
    echo $sc;
}

结果:

8383

它应该只返回83而不是8383。

我指出了元评级所在的位置,因为我需要抓住这些信息。我不确定它是否正确?可能是一些非常粗糙的工作,我不太了解preg_match,在线文档没有帮助。

有人可以帮帮我吗?

3 个答案:

答案 0 :(得分:11)

您应该只回显$score[1],因为这是您第一次捕获的带括号的子模式的位置。

阅读preg_match

的文档

答案 1 :(得分:5)

供参考:

array(2) {
  [0]=>
  string(56) "<span class="score_value" property="v:average">83</span>"
  [1]=>
  string(2) "83"
}

Manual读到:

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

答案 2 :(得分:1)

在匹配上使用print_r是肯定的,但我认为它将括号中的反向引用值打印为第二个