表題の通りの質問をさせて頂きたいのですが、その表現が曖昧で具体的でないと思いますので、
実際に抽出したい例を以下に記載致します。
html
1<div style="width:500px" class="box"> 2<div class="title" style="background:blue" id="site1"><a href='http://test.com_1' target="_blank">テスト1</a></div></div> 3 4 5<div style="width:500px" class="box"> 6<div class="title" style="background:blue" id="site2"><a href='http://test.com_2' target="_blank">テスト2</a></div></div> 7 8 9<div style="width:500px" class="box"> 10<div class="title" style="background:blue" id="site3"><a href='http://test.com_3' target="_blank">テスト3</a></div></div> 11 12 13<div style="width:500px" class="box"> 14<div class="title" style="background:blue" id="site4"><a href='http://test.com_4' target="_blank">テスト4</a></div></div> 15 16 17<div style="width:500px" class="box"> 18<div class="title" style="background:blue" id="site5"><a href='http://test.com_5' target="_blank">テスト5</a></div></div>
このようなhtmlの中から、4つ目の群、 idで言うsite4 http://test.com_4の部分、
html
1<div style="width:500px" class="box"> 2<div class="title" style="background:blue" id="site4"><a href='http://test.com_4' target="_blank">テスト4</a></div></div>
を抽出したいのですが、うまく出来ずにいるので質問させて頂きます。
デリミタは#としてみました。
PHP
1$pattern = '#<div style="width:500px" class="box">(.*)http://test.com_4(.*)</div></div>#'; 2preg_match($pattern,$kijihtmltag,$match);
こちらでマッチはしませんでした。
$patternを以下に変えると
PHP
1$pattern = '#<div class="title"(.*)http://test.com_4(.*)</div></div>#';
html
1<div class="title" style="background:blue" id="site4"><a href='http://test.com_4' target="_blank">テスト4</a></div></div>
この部分は抽出に成功しました。
ここは抽出できるのに、<div style="width:500px"ここからは抽出できないのはなぜかと思い調べてみると、 .* これが改行は含まないという事を確認して、
[\s\S]* これだと改行を含んだ全ての文字となるとの事で、
PHP
1$pattern = '#<div class="title"([\s\S]*)http://test.com_4(.*)</div></div>#';
としてみた所、抽出結果は、
html
1<div style="width:500px" class="box">~~~~~~~~中略~~~ 2~~中略~ 3~~中略~ 4~~中略~ 5~~中略~ 6~~中略~~~~~中略~~~中略~~~中略~~~ テスト4</a></div></div>
上から下まで、4つの群を全て抽出してしまった次第です。
適当に思いつくがままに、
([\s\S]*)
という部分を、
([\s\S]*?)
と変更してみても
4つの群を全て抽出してしまいます。
ので、大体表題のような具合の質問になりますが、
改行を含む文字列を間に挟み、
その前にいくつも同じ形式(例:ここでは <div style="width:500px" )があったとしても
そこの最短での(ここで言うと一番近いところ)の部分を抽出したい、となりますが、
正しい抽出のパターンを教えて頂きたいので宜しくお願い致します。
$patternには、 http://test.com_4を含み、その前半部分を正しく変化させる事で、うまくマッチさせる方法をお教え頂きたいです、宜しくお願い致します。
回答2件
あなたの回答
tips
プレビュー