从HTML中提取文本

时间:2012-02-20 19:18:42

标签: php regex

我正在更新我的网站以设置rDNS,但是我在这里询问您如何处理我的问题。我在名为$aIP的数组中拥有所有IP(IPv4)。现在我有一个这样的列表:

<tr><td>1.2.3.4</td><td>hostname.bla.com</td><td><a href="edit-reverse.cgi?id=1">myserver.com</a></td></tr>
<tr><td>1.2.3.5</td><td>hostname.bla.com</td><td><a href="edit-reverse.cgi?id=2"><i>not set</i></a></td></tr>
<tr><td>1.2.3.6</td><td>hostname.bla.com</td><td><a href="edit-reverse.cgi?id=3"><i>not set</i></a></td></tr>
<tr><td>1.2.3.7</td><td>hostname.bla.com</td><td><a href="edit-reverse.cgi?id=4">test.myserver.com</a></td></tr>
<tr><td>1.2.3.8</td><td>hostname.bla.com</td><td><a href="edit-reverse.cgi?id=5"><i>not set</i></a></td></tr>
<tr><td>1.2.3.9</td><td>hostname.bla.com</td><td><a href="edit-reverse.cgi?id=6"><i>not set</i></a></td></tr>

现在我需要当前的rDNS值(在这种情况下为myserver.comnot settest.myserver.com),我需要它所链接的值或完整网址({{1 }}或edit-reverse.cgi?id=1)链接到数组1中的IP地址。

这将是预期的输出(特别是在这种输出格式中而不是数组或其他东西):

$aIP

请注意,我所拥有的所有IP地址可能都不在1.2.3.4 => 1, myserver.com 1.2.3.5 => 2, not set 1.2.3.6 => 3, not set 1.2.3.7 => 4, test.myserver.com 1.2.3.8 => 5, not set 1.2.3.9 => 6, not set 数组中,所以基本上它应该遍历HTML代码并根据$aIP数组搜索值。< / p>

我正在考虑使用正则表达式,但后来我对它们知之甚少,所以它可能是非常低效的代码。处理这个问题的最佳方法是什么?

1 个答案:

答案 0 :(得分:2)

我找到了一个完美的解决方案,使用原生函数:

/*** a new dom object ***/ 
$dom = new domDocument; 

/*** load the html into the object ***/ 
$dom->loadHTML($html); 

/*** discard white space ***/ 
$dom->preserveWhiteSpace = false; 

/*** the table by its tag name ***/ 
$tables = $dom->getElementsByTagName('table'); 

/*** get all rows from the table ***/ 
$rows = $tables->item(0)->getElementsByTagName('tr'); 

/*** loop over the table rows ***/ 
foreach ($rows as $row) 
{ 
    /*** get each column by tag name ***/ 
    $cols = $row->getElementsByTagName('td'); 
    /*** echo the values ***/ 
    echo $cols->item(0)->nodeValue.'<br />'; 
    echo $cols->item(1)->nodeValue.'<br />'; 
    echo $cols->item(2)->nodeValue; 
    echo '<hr />'; 
}

找到http://www.phpro.org/examples/Parse-HTML-With-PHP-And-DOM.html

谢谢大家。