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 具有 class="_in",但在 tr 中有另一个表,并且在该表中有另一个 tr 标记。除此之外, tr 以多种方式结束 class="_in" 。如您所见,它可以以</h1></td></tr>or </h2></td></tr>or结尾</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

首先,将 HTML 转换为 DOMDocument。

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

然后找到你所有的<TR>元素。

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

然后遍历它们

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

然后导出字符串

$html = $dom->saveHTML()

供参考:http ://www.php.net/manual/en/class.domdocument.php

于 2012-09-19T17:42:20.680 回答
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 回答