preg_match out放置数组而没有内容

时间:2012-07-11 16:54:52

标签: php regex

我试图解析特定div标签内部的信息,由于某种原因,它不断输出数组而没有信息,我无法弄明白我的生活。

这就是我所拥有的。

$html = file_get_html('http://finance.yahoo.com/q/hp?s=^DJI&a=05&b=4&c=2012&d=06&e=6&f=2012&g=d');
$i=0;
$classes = array('red', 'blue', 'yellow', 'green', 'black', 'purple', 'grey');
$ci = 0;
foreach ($html->find('.yfnc_datamodoutline1 .yfnc_tabledata1') as $element){

$symbols = $element->outertext;
$hp = '<div class="'.$classes[$ci].'">'.$symbols.'</div>';
$ci++;
if($ci == count($classes)) $ci = 0;
preg_match_all("'<div class=\"black\">([^<]*)</div>'si", $hp, $match);

print_r($hp);
//print_r($match);

}

现在,如果我打印出$ hp,显然有关于div标签的信息,我试图从中获取信息,输出看起来像这样。

<div class="red">Jul 6, 2012</div>
<div class="blue">12,889.40</div>
<div class="yellow">12,889.40</div>
<div class="green">12,702.99</div>
<div class="black">12,772.47</div>
<div class="purple">967,600</div>
<div class="grey">12,772.47</div>
<div class="red">Jul 5, 2012</div>
<div class="blue">12,941.85</div>
<div class="yellow">12,961.30</div>
<div class="green">12,852.24</div>
<div class="black">12,896.67</div>
<div class="purple">978,000</div>
<div class="grey">12,896.67</div>

黑色是我试图得到的, 但是当我尝试在preg_match函数

中打印$ match时,我会继续获得看起来像这样的数组
Array ( [0] => Array ( ) [1] => Array ( ) ) Array ( [0] => Array ( ) [1] => Array ( ) ) Array ( [0] => Array ( ) [1] => Array ( ) ) Array ( [0] => Array ( ) [1] => Array ( ) ) Array ( [0] => Array ( ) [1] => Array ( ) ) Array ( [0] => Array ( ) [1] => Array ( ) ) Array ( [0] => Array ( ) [1] => Array ( ) ) 

非常感谢任何帮助,您也可以运行代码here and test it out只需打开索引文件。

3 个答案:

答案 0 :(得分:0)

你忘了/之前你需要删除单引号,因为它们被作为表达式的一部分。

preg_match_all("<div class=\"black\">([^<]*)</div>/si", $hp, $match);

编辑:试试这个。

此外,您可能会发现此网站很有用:http://gskinner.com/RegExr/     

  $html = '<div class="red">Jul 6, 2012</div>
<div class="blue">12,889.40</div>
<div class="yellow">12,889.40</div>
<div class="green">12,702.99</div>
<div class="black">12,772.47</div>
<div class="purple">967,600</div>
<div class="grey">12,772.47</div>
<div class="red">Jul 5, 2012</div>
<div class="blue">12,941.85</div>
<div class="yellow">12,961.30</div>
<div class="green">12,852.24</div>
<div class="black">12,896.67</div>
<div class="purple">978,000</div>
<div class="grey">12,896.67</div>';

  preg_match_all("/<div class=\"black\">([^<]*)<\/div>/i", $html, $matches);
  echo "<pre>";
  print_r($matches[1]);

?>

答案 1 :(得分:0)

我会写的:

preg_match_all("/<div class=\"black\">(.*)<\/div>/si", $hp, $match);

答案 2 :(得分:0)

我不确定你要做什么,但我认为你根本不需要在这里使用正则表达式。在您循环的数据中,您已经知道您是否有课程black

在你的循环中你不能做到

if ($classes[$ci] === 'black') {
    echo $symbols;
}

您也可以轻松地将其存储在数组中。