-2

我正在尝试从网站上获取 cetrain 值:http: //www.gitanjalijewels.com/

我正在使用以下代码:

<?php 


$data = file_get_contents('http://www.gitanjalijewels.com/category.php?id=39');
$regex = '/GOLD RATES:: (.+?) ,/';
preg_match($regex,$data,$match);
var_dump($match); 
echo $match[1];

?>

但是我得到的结果是:

数组(0){}

无法确定可能出了什么问题?谁能指导我朝着正确的方向前进?

4

3 回答 3

2

不要使用正则表达式来解析 HTML。使用 DOM 解析器。

include('simple_html_dom.php');
$html = file_get_html('http://www.gitanjalijewels.com/');

foreach($html->find('/html/body/div[1]/div/table/tbody/tr[3]/td/li/marquee/') as $element)                                     
{ 
       echo $element->plaintext . '<br>';
}

输出:

GOLD RATES::(24kt999:--Rs.2868), (24kt995:--Rs.2841), (22kt:--Rs.2675), (18kt:--Rs.2236) 
于 2013-07-26T06:24:23.287 回答
1
$regex = '/GOLD RATES::[\s]?(.+?)[\s]?,/si';
preg_match($regex,$data,$match);
var_dump($match);

输出 :

array(2) {
  [0] =>
  string(32) "GOLD RATES::(24kt999:--Rs.2868),"
  [1] =>
  string(19) "(24kt999:--Rs.2868)"
}
于 2013-07-26T06:20:40.283 回答
1
$html = file_get_contents("http://www.gitanjalijewels.com/category.php?id=39");

$matches = array();
preg_match("/GOLD RATES::[^\>]+/", $html, $matches);
print("<pre>");
var_dump($matches);
print("</pre>");

if( count($matches) > 0 ){
    $html = $matches[0];
    $matches = array();
    preg_match_all("/\(([^:]+)\:([^\)]+)\)/", $html, $matches);

    $goldPrice = array();
    if( count($matches) > 0){
        for($i = 0; $i<count($matches[1]); $i++)
            $goldPrice[ $matches[1][$i] ] = $matches[2][$i];
    }
    print("<pre>");
    var_dump($goldPrice);
    print("</pre>");
}

result:
array(4) {
    ["24kt999"]=>
        string(9) "--Rs.2868"
    ["24kt995"]=>
        string(9) "--Rs.2841"
    ["22kt"]=>
        string(9) "--Rs.2675"
    ["18kt"]=>
        string(9) "--Rs.2236"
}
于 2013-07-26T06:32:57.493 回答