php与preg_match_all()不会产生任何结果

时间:2011-10-06 16:47:02

标签: php regex preg-match-all

我正在尝试使用这个PHP脚本来查找来自雅虎财经的股票报价。我遇到的问题是,当脚本运行时,它不会产生任何结果。这让我相信我的正则表达式是不正确的,但是当我在myregextester.com上使用相同的正则表达式时,它会显示我对给定输入所期望的结果。任何帮助将不胜感激。此外,我的PHP可能不正确我正在尝试做什么。

<html>
<head>
    <title>Stock Quote from Nasdaq</title>
</head>
<body>
    <?php
        // choose stock to look at
        $symbol = 'AMZN';
        echo "<h1> Stock Quote for $symbol </h1>";
        //echo 'this printed (1)<br />';

        $theurl = 'http://finance.yahoo.com/q?s=AMZN';

        //echo 'this printed (2)<br />';

        $contents = file_get_contents($theurl);

        //find the part of the page we want and output it
        if (preg_match_all('/amzn">([0-9]+\.[0-9]+)/', $contents, $matches)) {
            echo "The price for $symbol: ".$matches[1][0];
        } else {
            echo "No Results";
        }
    ?>
</body>
</html>

3 个答案:

答案 0 :(得分:1)

您要搜索的是:

 <span id="yfs_l10_amzn">221.37</span>

你的正则表达式会成功。

所以你的实际问题是检索页面。除了令人讨厌的$theurl变量名称之外,您应该使用file_get_contents代替fread等。

 $contents = file_get_contents($theurl);

在您的代码段中工作。

答案 1 :(得分:0)

我刚刚下载了网址http://finance.yahoo.com/q?s=AMZN并查看了网页来源。为/ amzn做了一次搜索。一场比赛。那是<a href="/marketpulse/AMZN">Market Pul....因此没有匹配。

需要重新考虑。

答案 2 :(得分:0)

逃离&gt;

试试这个:

preg_match_all('/amzn"\>[0-9]+\.[0-9]+/',$contents, $matches);