2011-10-06 41 views
0

我想使用这个PHP脚本,以查找从雅虎财经股票报价。我遇到的问题是脚本运行时,它不会产生任何结果。这使我相信我的正则表达式是不正确的,但是当我在myregextester.com上使用相同的正则表达式时,它显示了我期望给定输入的结果。任何帮助将不胜感激。此外,我的PHP可能是不正确的,我想要做的。php与preg_match_all()生成没有结果

<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> 
+2

哥们,当涉及到正则表达式,总是带着小文的例子开始并测试了很多。 – Rufus

+0

运行此脚本时获取输出的内容是什么?有可能雅虎返回与您的脚本不同的东西,而不是返回浏览器。 –

回答

1

你所寻找的是:

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

你的正则表达式将为该成功。

所以你的实际问题是检索页面。除了讨厌$theurl变量的名字,你应该只使用file_get_contents,而不是fread

$contents = file_get_contents($theurl); 

程式码中的工作。

+0

谢谢。 – davelupt

0

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

需要重新思考。

+0

正则表达式不断查找,直到找到指定的小数。 – mario

+0

@mario - 不,它不。在找到amzn后,接下来的字符应该是“>后跟数字”,看看页面的源代码,我只是选择了正则表达式的前几个字符来进行搜索 –

+0

这不是唯一的发生,再次,如果正则表达式不会'不匹配,PCRE继续搜索下一个部分匹配。顺便说一下,'/'是分隔符,不是正则表达式的一部分;它既不区分大小写,也不区分大小写 – mario

0

逃离>

试试这个:

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