是否有Regex可以读取下表中的内容,请注意,有许多类似的表,所以我只想读取下表的内容。
我想读取行号5,6,7 <TR>
中的所有行
我的正则表达式如下所示,但不起作用
$match = preg_replace('~<tr align="center" bgcolor="#F3F3E4">">GOLD</a></td>#[a-z0-9]{6}~i','',$match[3]);
echo '<table><tr>' . $match . '</tr></table>';
我的HTML代码看起来像这个
<table width="571" border="0" cellspacing="0" cellpadding="0"><tr bgcolor="#000000"><td><table border="0" cellspacing="1" cellpadding="0" align="center" width="571">
<tr>
<td bgcolor="#000000"> </td>
<td align="center" bgcolor="#000000" colspan="8"><p class="white">New
York Spot Price</td>
<td></td>
<td align="right" bgcolor="#000000"> </td>
</tr>
<tr bgcolor="#F3F3E4">
<td bgcolor="#000000" width="31" nowrap></td>
<td bgcolor="#000000"> </td>
<td align="center" colspan="7" bgcolor="#F3F3E4"><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><b><font color=RED>MARKET IS CLOSED</font><BR>(Will open in 5 hrs. 25 mins.)</b></font></td>
<td colspan="2" align="center" bgcolor="#F3F3E4"> </td>
</tr>
<tr bgcolor="#F3F3E4" align="center">
<td bgcolor="#000000"> </td>
<td bgcolor="#000000"> </td>
<td bgcolor="#CCCC99"><p>Metals</td>
<td bgcolor="#CCCC99"><p>Date</td>
<td bgcolor="#CCCC99"><p>Time<br>
(EST)</td>
<td bgcolor="#CCCC99"><p>Bid</td>
<td bgcolor="#CCCC99"><p>Ask</td>
<td colspan="2" bgcolor="#CCCC99"><p>Change</td>
<td bgcolor="#CCCC99"><p>Low</td>
<td bgcolor="#CCCC99"><p>High</td>
</tr>
<tr bgcolor="#F3F3E4" align="center">
<td bgcolor="#000000" width="31" nowrap> </td>
<td bgcolor="#000000" nowrap> </td>
<td align="left"><p> <a href="/charts/livegoldnewyork.html" onMouseOver="ChangeImage('NY1','0')" onMouseOut="ChangeImage('NY1','1')">GOLD</a></td>
<td><p>07/10/2013</td>
<td><p>17:15</td>
<td><p>1262.90</td>
<td><p>1263.90</td>
<td><p class=spotgreen>+12.20</p></td>
<td><p class=spotgreen>+0.98%</p></td>
<td><p>1247.10</td>
<td><p>1268.40</td>
</tr>
<tr align="center" bgcolor="#F3F3E4">
<td bgcolor="#000000" width="31" nowrap> </td>
<td bgcolor="#000000"> </td>
<td align="left"><p> <a href="/charts/livesilver.html#ny" onMouseOver="ChangeImage('NY2','0')" onMouseOut="ChangeImage('NY2','1')">SILVER</a></td>
<td><p>07/10/2013</td>
<td><p>17:15</td>
<td><p>19.47</td>
<td><p>19.57</td>
<td><p class=spotgreen>+0.20</p></td>
<td bgcolor="#F3F3E4"><p class=spotgreen>+1.06%</p></td>
<td><p>19.03</td>
<td><p>19.69</td>
</tr>
<tr align="center" bgcolor="#F3F3E4">
<td bgcolor="#000000" width="31" nowrap> </td>
<td bgcolor="#000000"> </td>
<td align="left"><p> <a href="/charts/liveplatinum.html" onMouseOver="ChangeImage('NY3','0')" onMouseOut="ChangeImage('NY3','1')">PLATINUM</a></td>
<td><p>07/10/2013</td>
<td><p>17:13</td>
<td><p>1372.00</td>
<td><p>1377.00</td>
<td><p class=spotgreen>+6.00</p></td>
<td><p class=spotgreen>+0.44%</p></td>
<td><p>1358.00</td>
<td><p>1383.00</td>
</tr>
<tr align="center" bgcolor="#F3F3E4">
<td bgcolor="#000000" width="31" nowrap> </td>
<td bgcolor="#000000"> </td>
<td align="left"><p> <a href="/charts/livepalladium.html" onMouseOver="ChangeImage('NY4','0')" onMouseOut="ChangeImage('NY4','1')">PALLADIUM</a></td>
<td><p>07/10/2013</td>
<td><p>17:11</td>
<td><p>714.00</td>
<td><p>719.00</td>
<td><p class=spotgreen>+16.00</p></td>
<td><p class=spotgreen>+2.29%</p></td>
<td><p>707.00</td>
<td><p>721.00</td>
</tr>
</table></td></tr></table>
试试这个:
$dom = new DOMDocument();
@$dom->loadHTML($html);
$tr = $dom->getElementsByTagName('tr');
$out = array();
foreach ($tr as $key => $value){
if ($key > 4 && $key < 8){
$p = $value->getElementsByTagName('p');
foreach ($p as $key2 => $value2){
$out[$key][] = $value2->nodeValue;
}
}
}
var_dump($out);
我得到了以下信息:
Array
(
[5] => Array
(
[0] => SILVER
[1] => 07/10/2013
[2] => 17:15
[3] => 19.47
[4] => 19.57
[5] => +0.20
[6] => +1.06%
[7] => 19.03
[8] => 19.69
)
[6] => Array
(
[0] => PLATINUM
[1] => 07/10/2013
[2] => 17:13
[3] => 1372.00
[4] => 1377.00
[5] => +6.00
[6] => +0.44%
[7] => 1358.00
[8] => 1383.00
)
[7] => Array
(
[0] => PALLADIUM
[1] => 07/10/2013
[2] => 17:11
[3] => 714.00
[4] => 719.00
[5] => +16.00
[6] => +2.29%
[7] => 707.00
[8] => 721.00
)
)
我真的很想知道为什么要使用regex。不确定你是否真的必须这样做,如果是这样的话,这个答案对你没有任何好处。但是使用jquery可以很容易地解决这个问题。在jquery中,您可以使用.eq()
函数来完成此操作。
$('table tr').eq(5).text()
这里举了一个例子:http://jsfiddle.net/a5Yyf/
希望它对你有任何好处:)祝你好运