I have a problem with regex, I need to wrap all the tr which contains th and put it in a thead. I have a variable $html which contains a html table like this:
$html ="
<table>
<tr>
<th>header1</th>
<th>header2</th>
<th>header3</th>
</tr>
<tr>
<th>header21</th>
<th>header22</th>
<th>header23</th>
</tr>
<tr>
<td>body1</td>
<td>body2</td>
<td>body3</td>
</tr>
<tr>
<td>body21</td>
<td>body22</td>
<td>body23</td>
</tr>
</table>";
The regex i wrote is this
$html = preg_replace_callback(
'#(<tr.*?<th>.*?<th>.*?<\/tr>)#s',
function($match) {
return '<thead>' . $match[0] . '</thead>';
},
$html);
But the result I get is different for what I want.
Now, I get tr into a different thead.
It's not a good idea to try to parse HTML with regular expressions.
That said, you need to get rid of one question mark, which gives you unlimited but as few as possible. For the space between the first and last
<th>you want it to be as many as possible. This will to the trick:See https://regex101.com/r/fR1xB5/1