将包含多组<tr>标签的字符串分隔成数组

问题描述 投票:0回答:4

我有一个包含 3 个 tr 的字符串变量:

$string = '<tr><td> Total 1 </td><td>779,00</td></tr><tr><td> Total 2 </td><td>867,25</td></tr><tr><td> Total 3 </td><td>939,00</td></tr>';

我尝试拆分字符串以获得 3 个

<tr>...</tr>
标签。

我已经尝试过:

$match = preg_split('[(<tr[^>]*>.*?</tr>)]', $string , NULL, PREG_SPLIT_DELIM_CAPTURE);

但我没有得到好的结果。

php html html-parsing tablerow
4个回答
3
投票

尝试

$string = '<tr><td> Total 1 </td><td>779,00</td></tr><tr><td> Total 2 </td><td>867,25</td></tr><tr><td> Total 3 </td><td>939,00</td></tr>';
$result = array_filter(explode('</tr>', str_replace('<tr>','',$string)));
print_r($result);

希望有帮助:)


2
投票

我不建议使用正则表达式来解析你的 HTML,但如果你想这样做,这里是正确的方法:

 $regexPattern = "/<tr>(.*?)<\\/tr>/"; 
 $string = "<tr><td> Total 1 </td><td>779,00</td></tr><tr><td> Total 2 </td><td>867,25</td></tr><tr><td> Total 3 </td><td>939,00</td></tr>"; 

 preg_match_all($regexPattern , $string , $matches);

根据要求,这是包含标签的正则表达式:

 $regexPattern = "/(<tr>.*?<\\/tr>)/"; 

祝你好运。


0
投票

尝试匹配这三个trs

preg_match_all('/<tr[^>]*>.*?<\/tr>/', $string , $match);
var_dump($match);

输出:

array(1) {
  [0]=>
  array(3) {
    [0]=>
    string(42) "<tr><td> Total 1 </td><td>779,00</td></tr>"
    [1]=>
    string(42) "<tr><td> Total 2 </td><td>867,25</td></tr>"
    [2]=>
    string(42) "<tr><td> Total 3 </td><td>939,00</td></tr>"
  }
}

0
投票

你所做的很好,只需使用 PHP 的 array_filter 方法过滤掉空结果

<?php
$string = '<tr><td> Total 1 </td><td>779,00</td></tr><tr><td> Total 2 </td><td>867,25</td></tr><tr><td> Total 3 </td><td>939,00</td></tr>';
$match = array_filter(preg_split('[(<tr[^>]*>.*?</tr>)]', $string , -1, PREG_SPLIT_DELIM_CAPTURE));

print_r($match);

结果:

Array
(
    [1] => <tr><td> Total 1 </td><td>779,00</td></tr>
    [3] => <tr><td> Total 2 </td><td>867,25</td></tr>
    [5] => <tr><td> Total 3 </td><td>939,00</td></tr>
)
© www.soinside.com 2019 - 2024. All rights reserved.