我需要经常表达的帮助。我希望从http://www.ambito.com/economia/mercados/获取数据(“DÓLAR(OFICIAL)”和“DÓLAR(INFORMAL)”的价格)。
我用那个=
$data = file_get_contents("http://www.ambito.com/economia/mercados/");
$cadena= '/(?:<span class="m2">)?(.*)(?:<\/span><span class="m3">?(.*)<\/span><span class="m4">)?(.*)(?:<\/span>)/';
if ( preg_match($cadena, $data , $cap ) )
我在if中得到FALSE因为我找不到Match
编辑:
非常感谢你。现在我读了DOM的文档,然后用代码解决了我的问题(我不知道这是不是最好的方法)。 $domain = 'http://www.ambito.com/economia/mercados/';
$html = file_get_html($domain);
$ret_m3 = $html->find('span[class=m3]');
$ret_m4 = $html->find('span[class=m4]');
echo $ret_m3[0]."<br>";
echo $ret_m4[0]."<br>";
echo $ret_m3[1]."<br>";
echo $ret_m4[1]."<br>";
答案 0 :(得分:0)
试试这个:
$data = file_get_contents("http://www.ambito.com/economia/mercados/");
$cadena= '#<span class="m2">([^<]*)</span>\s*<span class="m3">([^<]*)</span>\s*<span class="m4">([^<]*)</span>#';
if ( preg_match($cadena, $data , $cap ) ) {
var_dump($cap);
}
输出:
array(4) {
[0]=>
string(133) "<span class="m2">Dólar (Oficial)</span>
<span class="m3">7,960</span>
<span class="m4">8,010</span>"
[1]=>
string(15) "Dólar (Oficial)"
[2]=>
string(5) "7,960"
[3]=>
string(5) "8,010"
}
如前所述,使用正则表达式不是解析HTML(xml)文档的最佳方法。
答案 1 :(得分:0)
正如其他人评论的那样,您应该使用DOM解析器而不是正则表达式来从HTML获取信息。无论如何,这里是为了获得Dólar(Oficial)值,另一个应该像这个一样简单:
/\<span class=\"m2"\>(?:.*)\<\/span>\s*\<span class=\"m3"\>(.+?)\<\/span\>\s*\<span class=\"m4"\>(.+?)\<\/span\>/
第1组和第2组应该是您要查找的值。