PHP - Split String html元素

I have a string variable that contains 3 trs:

$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>';

I try to split the string to get 3 <tr>...</tr> Tags.

I have tried :

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

but I don't get good results.

Thanks for help.

I don't recommend using regex to parse your HTML, but if you want to anyways, here is the correct way of doing it:

 $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);

As requested, here is the regex to include the tags:

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

Good luck.

Try

$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);

hope it helps :)

Try to match the three trs

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

Output:

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>"
  }
}

What you are doing is nice, just filter empty results out using PHP's array_filter method

i.e.

<?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);

Results in:

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>
)