如何使用正则表达式获取元素的整个HTML?

时间:2010-12-26 03:39:29

标签: php regex

我正在学习正则表达式,但无法弄清楚....我想从DIV获取整个HTML,如何获取?

已经尝试过这个;

/\< td class=\"desc1\"\>(.+)/i

它返回;

Array
(
[0] => < td class="desc1">
[1] => 
)

我匹配的代码就是这个;

<table id="profile" cellpadding="1" cellspacing="1">
<thead>
<tr>
<th colspan="2">Jogador TheInFEcT </th>
</tr>
<tr>
<td>Detalhes</td>
<td>Descrição:</td>

</tr>
</thead><tbody>
<tr>
<td class="empty"></td><td class="empty"></td>
</tr>
<tr>
<td class="details">
<table cellpadding="0" cellspacing="0">
<tbody><tr>

<th>Classificação</th>
<td>11056</td>
</tr>
<tr>
<th>Tribo:</th>
<td>Teutões</td>
</tr>

<tr>
<th>Aliança:</th>
<td>-</td>
</tr>
<tr>
<th>Aldeias:</th>
<td>1</td>

</tr>
<tr>
<th>População:</th>
<td>2</td>
</tr><tr>
<td colspan="2" class="empty"></td>
</tr>
<tr>

<td colspan="2"> <a href="spieler.php?s=1">» Alterar perfil</a></td>
</tr>

</tbody></table>

</td>
<td class="desc1">
<div>STATUS: OFNAaaaAA</div>
</td>

</tr>
</tbody>
</table>

我需要将整个代码放在&lt; td class =“desc1”&gt;,就像那样;

<div >STATUS: OFNAaaaAA< /div>
</td>

</tr>
</tbody>
</table>

有人可以帮助我吗?

提前致谢。

2 个答案:

答案 0 :(得分:5)

我通常使用

$dom = DOMDocument::load($htmldata);

用于将HTML代码转换为XML DOM。然后你可以使用

$node = $dom->getElementsById($id); 
/* or */
$nodes = $dom->getElementsByTagName($tag); 

获取HTML / XML节点。
现在,使用

$node->textContent

获取节点内的数据。

答案 1 :(得分:0)

试试这个,它没有涵盖所有可能的情况,但应该有效:

/<td\s+class=['"]\s*desc1\s*['"]\s*>((.|\n)*)<\/td>/i

测试时使用:http://www.pagecolumn.com/tool/pregtest.htm

编辑:Alan Moore建议的改进解决方案

/<td\s+class=['"]\s*desc1\s*['"]\s*>(.*?)<\/td>/s