HTMLの<table>内の<tr><td>から必要な情報を取得したいのですが、
正規表現チェッカーでは正しい結果が 2次元配列に繰り返しで入るのですが、
Eclipseでは、全体がarray[0][0]にマッチしてしまい、array[1][0]、array[2][0]... は最終行しか取れてない状況です。
元データ
<tr class="a"><td class="b">1</td><td class="c">1</td><td class="d"><a href="test1">test1</a></td><td class="e">1</td><td class="f"><a href="test1">test1</a></td></tr>
<tr class="a"><td class="b">2</td><td class="c">2</td><td class="d"><a href="test2">test2</a></td><td class="e">2</td><td class="f"><a href="test2">test2</a></td></tr>
<tr class="a"><td class="b">3</td><td class="c">3</td><td class="d"><a href="test3">test3</a></td><td class="e">3</td><td class="f"><a href="test3">test3</a></td></tr>
正規表現
preg_match_all('@<tr.*><td.*>(.*)<\/td><td.*>(.*)<\/td><td.*>(<a.*>.*<\/a>)<\/td><td.*>(.*)<\/td><td.*>(<a.*>.*<\/a>)<\/td><\/tr>@', $html, $matches);
htmlは mb_convert_encodingでUTF-8に変更してから、改行、タブを削除してます。
どなたかわかる方いらっしゃいましたらご教授お願いします。
\s*(.*)\s*
の部分、こうしてみたらどうでしょう。
\s*([^<\s]*)\s*
.*
が強くマッチするからです。<?php $html = '<tr class="a"><td class="b">1</td><td class="c">1</td><td class="d"><a href="test1">test1</a></td><td class="e">1</td><td class="f"><a href="test1">test1</a></td></tr><tr class="a"><td class="b">2</td><td class="c">2</td><td class="d"><a href="test2">test2</a></td><td class="e">2</td><td class="f"><a href="test2">test2</a></td></tr><tr class="a"><td class="b">3</td><td class="c">3</td><td class="d"><a href="test3">test3</a></td><td class="e">3</td><td class="f"><a href="test3">test3</a></td></tr>'; preg_match_all('@<tr.*><td.*>(.*)<\/td><td.*>(.*)<\/td><td.*>(<a.*>.*<\/a>)<\/td><td.*>(.*)<\/td><td.*>(<a.*>.*<\/a>)<\/td><\/tr>@U', $html, $matches); var_dump($matches);
array(6) { [0]=> array(3) { [0]=> string(167) "<tr class="a"><td class="b">1</td><td class="c">1</td><td class="d"><a href="test1">test1</a></td><td class="e">1</td><td class="f"><a href="test1">test1</a></td></tr>" [1]=> string(167) "<tr class="a"><td class="b">2</td><td class="c">2</td><td class="d"><a href="test2">test2</a></td><td class="e">2</td><td class="f"><a href="test2">test2</a></td></tr>" [2]=> string(167) "<tr class="a"><td class="b">3</td><td class="c">3</td><td class="d"><a href="test3">test3</a></td><td class="e">3</td><td class="f"><a href="test3">test3</a></td></tr>" } [1]=> array(3) { [0]=> string(1) "1" [1]=> string(1) "2" [2]=> string(1) "3" } [2]=> array(3) { [0]=> string(1) "1" [1]=> string(1) "2" [2]=> string(1) "3" } [3]=> array(3) { [0]=> string(25) "<a href="test1">test1</a>" [1]=> string(25) "<a href="test2">test2</a>" [2]=> string(25) "<a href="test3">test3</a>" } [4]=> array(3) { [0]=> string(1) "1" [1]=> string(1) "2" [2]=> string(1) "3" } [5]=> array(3) { [0]=> string(25) "<a href="test1">test1</a>" [1]=> string(25) "<a href="test2">test2</a>" [2]=> string(25) "<a href="test3">test3</a>" } }
質問文を編集しました。詳細はこちら。