2011-10-06 57 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);