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

有限会社アスク 柳本 yanagimoto @ ask-art.jp
2010年 6月 16日 (水) 17:22:20 JST


柳本です。

$html_source = preg_replace('/(\r|\n)/', '', $html_source);
preg_match_all('/<a name=\"(\d*?)\" href.*?<span class=\"teika\">定価:
(.*?)円<\/span><br \/>(<span class=\"sale\">セール価格:(.*?)円<\/span>
<br \/>)?/s', $html_source, $matches, PREG_SET_ORDER);
for($i=0;$i < count($matches);$i++)
{
	echo '商品番号:'.$matches[$i][1]."\n";
	echo '定価:'.$matches[$i][2]."\n";
	echo 'セール価格:'.$matches[$i][4]."\n";
	echo "\n";
}

こんな感じでどうでしょうか?

(2010/06/16 16:00), tk wrote:
> お世話になります。
> 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 mailing list  PHP-users @ php.gr.jp
> http://ml.php.gr.jp/mailman/listinfo/php-users
> PHP初心者のためのページ - 質問する前にはこちらをお読みください
> http://oldwww.php.gr.jp/php/novice.php3
> 



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