我想在以下代码的TR的单独数组中提取所有TD标记
<TR>
<TD class="table_border_both"><B>Person 1</B></TD>
<TD class="table_border_both"><B>Start, 10</B></TD>
<TD class="table_border_both"><B>End , 5</B></TD>
<TD class="table_border_both"><b>14
</b></TD>
</TR>
<TR>
<TD class="table_border_both"><B>Person 2</B></TD>
<TD class="table_border_both"><B>Start, 10</B></TD>
<TD class="table_border_both"><B>End , 5</B></TD>
<TD class="table_border_both"><b>14
</b></TD>
我试过这个RegEx如下
preg_match_all("/([<tr>|\\n]+(<td class=\"table_border_both\"><b>(.*?)<\\/b><\\/td>))/is", $str, $matches);
但是我希望所有TR都在saprate数组中,如下所示
[0]=>
array(4) {
[0]=>string(12) "Person 1"
[1]=>string(19) "Start, 10"
[2]=>string(12) "End , 5"
[3]=>string(7) "14
}
[1]=>
array(4) {
[0]=>string(12) "Person 2"
[1]=>string(19) "Start, 10"
[2]=>string(12) "End , 5"
[3]=>string(7) "14
}
答案 0 :(得分:0)
请don't attempt to parse HTML with regular expressions。它不适合这项工作。
为此目的,PHP有一个DOM extension。然后,您可以使用简单的XPath查询来提取所需的元素。
甚至还有一些库使这更容易(列表并不详尽):
答案 1 :(得分:0)
我 - 像你一样 - 用RegExes做些讨厌的事情。但是现在我不确定你是否认真使用正则表达而不是开玩笑,或者只是开玩笑,但作为社区预言的一部分,我想向你介绍{{ 1}}及其兄弟DOMDocument
:
DOMXPath
<强>输出强>:
$document = new DOMDocument;
$document->loadHTML($html);
$xpath = new DOMXPath($document);
$trs = $xpath->query('//tr');
$array = [];
foreach ($trs as $key => $tr) {
$td = $xpath->query('td', $tr);
foreach ($td as $value) {
$array[$key][] = $value->nodeValue;
}
}
print_r($array);
Array
(
[0] => Array
(
[0] => Person 1
[1] => Start, 10
[2] => End , 5
[3] => 14
)
[1] => Array
(
[0] => Person 2
[1] => Start, 10
[2] => End , 5
[3] => 14
)
)
是您的HTML源代码