[PHP-users 35234] preg_match_allによる要素の抽出

tk tk @ ss.iij4u.or.jp
2010年 6月 16日 (水) 16:00:48 JST


お世話になります。
tkと申します。

HTMLソースから、必要なデータを抜き出したいのですが、
改行や、各データの要素が同じでないことで、苦戦しています。
ご教授よろしくお願い申し上げます。

各商品のデータは、
「商品番号(商品画像)、定価、セール価格」
のブロックとして、HTMLに記述されています。
但し、セール価格は、ないものもあります。

HTMLソースの概略は以下のようなものです。
====================
<a name="987654" href="http://www.hogehoge.com/987654"><img
src="http://www.hogehoge.com/987654.jpg" /></a>
<span class="teika">定価: 12,000円</span><br />
<span class="sale">セール価格: 9,000円</span><br />
hogehoge
hogehoge
hogehoge
<a name="987789" href="http://www.hogehoge.com/987789"><img
src="http://www.hogehoge.com/987789.jpg" /></a>
<span class="teika">定価: 15,000円</span><br />
hogehoge
hogehoge
<a name="938235" href="http://www.hogehoge.com/938235"><img
src="http://www.hogehoge.com/938235.jpg" /></a>
<span class="teika">定価: 9,000円</span><br />
<span class="sale">セール価格: 7,500円</span><br />
hogehoge
hogehoge
<a name="988822" href="http://www.hogehoge.com/988822"><img
src="http://www.hogehoge.com/988822.jpg" /></a>
<span class="teika">定価: 10,000円</span><br />
hogehoge
hogehoge
hogehoge
====================

ここから、各商品の
nameのところの「商品番号」
「定価」
「セール価格」
を抜き出して

商品番号:987654
定価:12,000
セール価格:9,000

商品番号:987789
定価:15,000
セール価格:

商品番号:938235
定価:9,000
セール価格:7,500

商品番号:988822
定価:10,000
セール価格:

のように表示したいのです。

preg_match_all("/<a name=\"(\d*)\" href.*?<span class=\"teika\">定価:
(.*)円<\/span><br \/>/s", $html_source, $matches, PREG_SET_ORDER);

として、商品番号と定価のセットだけでも抜き出そうとしているのですが、不要
な部分もそのまま抜き出されてきます。
また、セール価格のあるもの、ないものをどのように組み込めば良いのかが、わ
からず困っています。
(以下全体があるかないか不明で、あれば、金額を抜き出す)
<span class="sale">セール価格: (.*)円</span><br />

ご教授よろしくお願い申し上げます。
tk












PHP-users メーリングリストの案内