[英]Get data only from html table used preg_match_all in php
我有这样的html表:
<table ... >
<tbody ... >
<tr ... >
<td ...>
string...
</td>
<td ...>
string...
</td>
<td ...>
string...
</td>
<td ...>
string...
</td>
<td ...>
string...
</td>
</tr>
<tr ... >
<td ...>
string...
</td>
<td ...>
string...
</td>
<td ...>
string...
</td>
<td ...>
</td>
<td ...>
string...
</td>
</tr>
..............
</tbody>
</table>
这是一个数据表,我需要从中获取所有数据。 该表将有很多行( <tr></tr>
)。 每行将有一个固定的列( <td></td>
)(当前为5)。 记住每个表,tr,td标签可能被格式化(在其中说“ ...”)
我希望每个人都可以帮助我为preg_match_all
函数编写一个正则表达式以获取如下数据:
array(
0 => array(
0=> 'some data0',
1=> 'some data1',
2=> 'some data2',
3=> 'some data3',
4=> 'some data4',
)
1 => array(
0=> 'some data0',
1=> 'some data1',
2=> 'some data2',
3=> 'some data3',
4=> 'some data4',
)
2 => array(
0=> 'some data0',
1=> 'some data1',
2=> 'some data2',
3=> 'some data3',
4=> 'some data4',
)
..........
)
现在为您的测试示例,希望您能帮助我!
<table border="1" >
<tbody style="" >
<tr style="" >
<td style="color:blue;">
data0
</td>
<td style="font-size:15px;">
data1
</td>
<td style="font-size:15px;">
data2
</td>
<td style="color:blue;">
data3
</td>
<td style="color:blue;">
data4
</td>
</tr>
<tr style="" >
<td style="color:blue;">
data00
</td>
<td style="font-size:15px;">
data11
</td>
<td style="font-size:15px;">
data22
</td>
<td style="color:blue;">
data33
</td>
<td style="color:blue;">
data44
</td>
</tr>
<tr style="color:black" >
<td style="color:blue;">
data000
</td>
<td style="font-size:15px;">
data111
</td>
<td style="font-size:15px;">
data222
</td>
<td style="color:blue;">
data333
</td>
<td style="color:blue;">
data444
</td>
</tr>
</tbody>
</table>
PHP具有本机扩展,可以使用DOM解析HTML和XML:
$dom = new DOMDocument;
$dom->loadHTML( $htmlContent );
$rows = array();
foreach( $dom->getElementsByTagName( 'tr' ) as $tr ) {
$cells = array();
foreach( $tr->getElementsByTagName( 'td' ) as $td ) {
$cells[] = $td->nodeValue;
}
$rows[] = $cells;
}
根据自己的喜好进行调整。 搜索StackOverflow或查看PHP手册,或浏览我的一些答案以了解有关其用法的更多信息。
您绝对不希望使用Regex解析HTML。
有太多的变化,其中之一是更重要的,更重要的是,正则表达式在HTML的层次结构特性方面不是很好。 最好使用XML解析器,或者最好使用特定于HTML的解析器。
每当需要刮擦HTML时,我都会倾向于使用Simple HTML DOM Parser库,该库接受HTML树并将其解析为可遍历的PHP对象,您可以查询类似JQuery的对象。
<?php
require 'simplehtmldom/simple_html_dom.php';
$sHtml = <<<EOS
<table border="1" >
<tbody style="" >
<tr style="" >
<td style="color:blue;">
data0
</td>
<td style="font-size:15px;">
data1
</td>
<td style="font-size:15px;">
data2
</td>
<td style="color:blue;">
data3
</td>
<td style="color:blue;">
data4
</td>
</tr>
<tr style="" >
<td style="color:blue;">
data00
</td>
<td style="font-size:15px;">
data11
</td>
<td style="font-size:15px;">
data22
</td>
<td style="color:blue;">
data33
</td>
<td style="color:blue;">
data44
</td>
</tr>
<tr style="color:black" >
<td style="color:blue;">
data000
</td>
<td style="font-size:15px;">
data111
</td>
<td style="font-size:15px;">
data222
</td>
<td style="color:blue;">
data333
</td>
<td style="color:blue;">
data444
</td>
</tr>
</tbody>
</table>
EOS;
$oHTML = str_get_html($sHtml);
$oTRs = $oHTML->find('table tr');
$aData = array();
foreach($oTRs as $oTR) {
$aRow = array();
$oTDs = $oTR->find('td');
foreach($oTDs as $oTD) {
$aRow[] = trim($oTD->plaintext);
}
$aData[] = $aRow;
}
var_dump($aData);
?>
并输出:
array
0 =>
array
0 => string 'data0' (length=5)
1 => string 'data1' (length=5)
2 => string 'data2' (length=5)
3 => string 'data3' (length=5)
4 => string 'data4' (length=5)
1 =>
array
0 => string 'data00' (length=6)
1 => string 'data11' (length=6)
2 => string 'data22' (length=6)
3 => string 'data33' (length=6)
4 => string 'data44' (length=6)
2 =>
array
0 => string 'data000' (length=7)
1 => string 'data111' (length=7)
2 => string 'data222' (length=7)
3 => string 'data333' (length=7)
4 => string 'data444' (length=7)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.