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