2012-02-20 82 views
0

我想写一个页面抓取脚本来获取网站的货币。我需要一些帮助来编写正则表达式。页面抓取的正则表达式

这是我到目前为止。

<?php 

function converter(){ 
     // Create DOM from URL or file 
     $html = file_get_contents("http://www.bloomberg.com/personal- finance/calculators/currency-converter/"); 

    // Find currencies. (using h1 to test) 
     preg_match('/<h1>(.*)<\/h1>/i', $html, $title); 
     $title_out = $title[1]; 
     echo $title_out; 

} 

$foo = converter(); 
echo $foo; 



?> 

这里是货币保留在彭博网站上的地方。

网站:http://www.bloomberg.com/personal-finance/calculators/currency-converter/

//<![CDATA[ 
     var test_obj = new Object(); 
     var price = new Object(); 
       price['ADP:CUR'] = 125.376; 

什么会表达看起来希望得到这样的速度? 任何帮助将是伟大的!

+0

不要使用正则表达式解析HTML代码;) – m0skit0 2012-02-20 17:48:11

+1

在他使用的情况下,这是可以接受的。 – 2012-02-20 17:49:20

+0

[How to parse HTML with PHP?](http://stackoverflow.com/questions/3650125/how-to-parse-html-with-php) – Gordon 2012-02-20 17:56:26

回答

3

这对我有用 - 是否需要更灵活?它是否需要采取各种空白 - 或者它一直只是一个空间? (围绕等号)

"/price\['ADP:CUR'\] = (\d+\.\d+/)" 

用法:

if(preg_match("/price\['ADP:CUR'\] = (\d+\.\d+)/", $YOUR_HTML, $m)) { 
//Result is in $m[1] 
} else { 
//Not found 
} 
+0

谢谢!太棒了。我将如何能够仅返回值?我会在这之前剥去角色吗?也可能 我把一个var在正则表达式,所以如果例如我想找到英镑,而不是ADP。我可以把“/价格\ ['$ this->来自:CUR'\] = \ d + \。\ d + /” – Will 2012-02-20 17:55:04

+0

查看我的更新回答:)是的,你可以在正则表达式中使用变量。 – jack 2012-02-20 17:57:37

+0

坦克你! @jack – Will 2012-02-20 18:05:23

2

这将返回一个副阵列相同在Bloomberg网站上的javascript对象。

<?php 
$data = file_get_contents('http://www.bloomberg.com/personal-finance/calculators/currency-converter/'); 

$expression = '/price\\[\'(.*?)\'\\]\\s+=\\s+([+-]?\\d*\\.\\d+)(?![-+0-9\\.]);/'; 

preg_match_all($expression, $data, $matches); 

$array = array_combine($matches[1], $matches[2]); 

print_r($array); 

echo $array['ADP:CUR'];// string(7) "125.376" 
?>