• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:正規表現でdivタグを親要素ごとに配列に格納したい)

divタグを親要素ごとに配列に格納する方法

このQ&Aのポイント
  • 正規表現を使用して、divタグを親要素ごとに配列に格納することは可能です。
  • 指定したHTMLコードに対して正規表現を適用し、該当するdivタグを抽出し、親要素ごとに配列に格納することができます。
  • 生成された配列には、各親要素のHTMLコードが格納されます。

質問者が選んだベストアンサー

  • ベストアンサー
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.2

ちょっとやってみました。 とりあえず結果がわかりやすいように表示してあります もとのdivは分岐をいれるなどすこし複雑に設定してあります <?php function swap_parent(&$a,$b){ $tmp=$a[$b]["end"]; $a[$b]["end"]=$a[$a[$b]["parent"]]["end"]; $a[$a[$b]["parent"]]["end"]=$tmp; if(isset($a[$a[$b]["parent"]]["parent"])){ swap_parent($a,$a[$b]["parent"]); } } $str=<<<eof 0<div id="x1">1<div id="x2">2<div id="x3">3</div>2<div id="x4">4</div>2</div>1</div> 0<div id="x5">5<div id="x6">6</div>5</div> 0<div id="x7">7</div>0 eof; $pattern_start="/<div(?:\s|>)/mis"; preg_match_all($pattern_start,$str,$match["start"],PREG_OFFSET_CAPTURE); $pattern_end="/(?<=<\/div)>/mis"; preg_match_all($pattern_end,$str,$match["end"],PREG_OFFSET_CAPTURE); foreach($match["start"][0] as $key=>$val){ $a=&$array[]; $a["start"]=$val[1]; $a["end"]=$match["end"][0][$key][1]; } for($i=1;$i<count($array);$i++){ for($j=$i-1;$j>=0;$j--){ if($array[$i]["start"]<$array[$j]["end"]){ $array[$i]["parent"]=$j; swap_parent($array,$i); break; } } } print htmlspecialchars($str)."<br>"; print "<hr>"; foreach($array as $val){ print htmlspecialchars(substr($str,$val["start"],$val["end"]-$val["start"]+1))."<br>"; } print "<hr>"; foreach($array as $val){ if(!isset($val["parent"])) print htmlspecialchars(substr($str,$val["start"],$val["end"]-$val["start"]+1))."<br>"; } ?>

noname#256090
質問者

お礼

まさに、求めてたものです。 yambejpさんホントにありがとうございます。 preg_match_all関数のオフセットを利用してsubstrで抜き出す考え方は、これからいろんな場面で使えそうです。swap_parent関数の動きも、ものすごく勉強になりました。

その他の回答 (1)

  • foreach
  • ベストアンサー率51% (43/84)
回答No.1

だから http://okwave.jp/qa/q6932872.html で汎用性が無いと指摘したんですよ。 もしかしてパターンが変わる度に質問して解決しようとしてます?

関連するQ&A