2010年6月16日

[PHP-users 35237] Re:preg_match_allによる要素の抽出

こんにちは。
たけぐちです。

セールは考えないとした場合は
preg_match_all("/<a name=\"(\d*)\" href.*?<span
class=\"teika\">定価:(.*)円<\/span><br \/>/s", $html_source, $matches,
PREG_SET_ORDER);

/s を /Us

preg_match_all("/<a name=\"(\d*)\" href.*<span
class=\"teika\".*定価:(.+)円<\/span><br \/>/Us", $html_source, $matches,
PREG_SET_ORDER);
で一応でます。

正規表現で全部引っ張ろうとするとぐちゃぐちゃになってしまう(自分だけかもしれませんが)ので、Setoさんのおっしゃる通りデータを加工したほうがいいかと。

セールが有る無しだけで記述の揺れがないと考えれば、

<a から 次の<a までの間が一つのデータと考え分割

それを繰り返しで
spanで指定されているclassと
<span></span>含まれる文字列を取得

必要なものだけとりだしてハッシュなりに入れる。

対象の内容によりけりですが、htmlは改行の意味が無く処理する上で
邪魔なことがあるので
$html_source=preg_replace("/\n/",'',$html_source);
などで捨ててます。
あ、preg_replaceである必要はないです。好みです。

正規表現はマッチする最初のほうからちょこちょこ広げていったほうが作りやすいかと思います。

--
takegu
_______________________________________________
PHP-users mailing list PHP-users@xxxxx
http://ml.php.gr.jp/mailman/listinfo/php-users
PHP初心者のためのページ - 質問する前にはこちらをお読みください
http://oldwww.php.gr.jp/php/novice.php3


投稿者 xml-rpc : 2010年6月16日 17:23
役に立ちました?:
過去のフィードバック 平均:(0) 総合:(0) 投票回数:(0)
本記事へのTrackback: http://hoop.euqset.org/blog/mt-tb2006.cgi/96396
トラックバック
コメント
コメントする




画像の中に見える文字を入力してください。