0

特定の 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>

黒は取得しようとしている 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 ( ) ) 

ここでコードを実行し、インデックス ファイルを開いてテストすることもできます。

4

3 に答える 3

0

私はそれを書きます:

preg_match_all("/<div class=\"black\">(.*)<\/div>/si", $hp, $match);
于 2012-07-11T17:11:05.657 に答える
0

何をしようとしているのか正確にはわかりませんが、ここで正規表現を使用する必要はまったくないと思います。ループしているデータでは、 class があるかどうかは既にわかっていますblack

あなたのループではできませんでした

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

それを配列に簡単に格納することもできます。

于 2012-07-11T18:44:48.010 に答える
0

si の前の / を忘れたので、単一引用符は式の一部として使用されるため、削除する必要があります。

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]);

?>
于 2012-07-11T17:09:55.197 に答える