phpの正規表現の質問です

a.phpファイルを作成しています
テーブルタグの中はtrが100個くらい並んでいます

a.php
********************
<html><body>
<?php
$s = '';
$b = strip_tags( @file_get_contents( __FILE__ ), '<tr><td>');
if ( preg_match_all{
}
echo ( $s );
?>
<TABLE>
<tr>
<td>1</td>
<td>1</td>
<td>ほげ1</td>
<td>ほげ2</td>
<td>ほげ3</td>
<td>ほげ4</td>
<tr>
<td>1</td>
<td>2</td>
<td>ほげ5</td>
<td>ほげ6</td>
<td>ほげ7</td>
<td>ほげ8</td>
</tr>




</TABLE></body></html>
********************

テーブルタグの中の、一番最初の<tr>の中の上から5番目の<td>タグの中身だけを抽出して
以下のように表示したいのですが
正規表現の条件をどのように書けばいいでしょうか?

a.php
********************
a.php
********************
<html><body>
ほげ4
<TABLE>
<tr>
<td>1</td>
<td>1</td>
<td>ほげ1</td>
<td>ほげ2</td>
<td>ほげ3</td>
<td>ほげ4</td>
<tr>
<td>1</td>
<td>2</td>
<td>ほげ5</td>
<td>ほげ6</td>
<td>ほげ7</td>
<td>ほげ8</td>
</tr>




</TABLE></body></html>
********************

回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2013/09/12 06:47:28
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:windofjuly No.1

回答回数2625ベストアンサー獲得回数1149

ポイント300pt

http://q.hatena.ne.jp/1378870759 の続きと書いておいがほうがよいですよ。

正規表現ではなくコードを入れ替えたほうが応用ききやすいです。

$tds[0][1] が1列目
$tds[1][1] が2列目
$tds[n][1] が(n-1)列目

<?php
    $s = '';
    $b = strip_tags( @file_get_contents( __FILE__ ), '<tr><td>');
    if ( preg_match_all("#<tr[^<]+?(.+?)</tr#is", $b, $trs , PREG_SET_ORDER) ) {
        $s = '<select name="問題番号">' . "\n";
        $tr = $trs[0]; # 一番最初だけなのでforeachを使わない
        if ( preg_match_all("#<td[^<]+?(.+?)</td#is", $tr[1], $tds , PREG_SET_ORDER) ) {
           $s .= '<option value="' . $tds[4][1] . '">' . $tds[4][1] . '</option>' . "\n";
        }
        $s .= '</select>' . "\n";
    }
    echo ( $s );
?>
id:takanii

ループ表示ではなく一つだけ表示していただけたら大丈夫な場合はどこをいじればいいのでしょうか?

2013/09/12 06:21:14
id:windofjuly

SELECTもOPTIONも不要ならさらに簡略化できます。

<?php
    $s = '';
    $b = strip_tags( @file_get_contents( __FILE__ ), '<tr><td>');
    if ( preg_match_all("#<tr[^<]+?(.+?)</tr#is", $b, $trs , PREG_SET_ORDER) ) {
       $tr = $trs[0]; # 一番最初だけなのでforeachを使わない
        if ( preg_match_all("#<td[^<]+?(.+?)</td#is", $tr[1], $tds , PREG_SET_ORDER) ) {
           $s .= $tds[4][1] . "\n";
        }
    }
    echo ( $s );
?>
2013/09/12 06:49:50

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません