3

まず、私の英語が下手で申し訳ありません。

私は以下のようなテーブルを持っています。

 <table>
  <tr class="_in" id="1">
    <td>content</td>
    <td>content
         <h1>content h1</h1>
    </td>
  </tr>
  <tr class="_in" id="2">
    <td>content</td>
    <td>content
        <table>
            <tr>
                <td>content</td>
            </tr>
        </table>
    <h2>content h2</h2>
    </td>
  </tr>
  <tr class="_in" id="3">
    <td>content</td>
    <td>
            <table>
              <tr>
                <td>content</td>
              </tr>
            </table>
            <h3>content h3</h3>
    </td>   
  </tr>
  <tr class="_in" id="4">
    <td>content</td>
    <td>content
        <h1>content h3</h1>
    </td>
  </tr>
  <tr class="_in" id="5">
    <td>content</td>
    <td>content
        <h1>content h1</h1>
    </td>
  </tr>
</table>

ご覧のとおり、正規表現を使用して tr has class="_in" を取得したいのですが、tr には別のテーブルがあり、そのテーブルには別の tr タグがあります。それに加えて、tr には class="_in" 終わりがたくさんあります。</h1></td></tr>ご覧のとおり、または</h2></td></tr>またはで終わることができます</h3></td></tr>

私の解決策は使用または演算子ですが、結果がありません。以下は私のコードです

$html=file_get_contents("vnair3.txt");
$parten='/<tr\sclass=\"_in\"[^>]*>.*(?:<\/h1>|<\/h2>|<\/h3>)\s+<\/td>\s+<\/tr>/isU';
preg_match_all($parten,$html,$output);
print_r($output);

各 tr タグが出力配列の各要素に class="_in" を持っているのを手伝ってください。私はphpを使用しています。皆さんありがとう

4

2 に答える 2

0

コードを変更すると、各 tr で class="_in" が得られます

<?php
$html=file_get_contents('vnair3.txt');
$output=str_replace("<tr","<tr class='_in' ",$html,$count);
//echo $output;
print_r($output);
?>
于 2012-09-19T05:50:36.353 に答える
0

First, slurp the HTML into a DOMDocument.

$dom = new DOMDocument::loadHTML($html_string);

Then find all your <TR> elements.

$trs = $dom->getElementsByTagName('tr')

Then iterate over them

foreach($trs as $tr) {
    $classes = $tr->getAttribute('class');
    $classes .= " _tr ";
    $tr->setAttribute('class', $classes);
}

Then export the string

$html = $dom->saveHTML()

For reference: http://www.php.net/manual/en/class.domdocument.php

于 2012-09-19T17:42:20.680 に答える