php中的正则表达式出错

时间:2014-01-30 13:41:40

标签: php regex

我需要经常表达的帮助。我希望从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>";

2 个答案:

答案 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组应该是您要查找的值。