我遇到了正则表达式的问题,我需要将包含tr
的所有th
换行并将其放在thead
中。我有一个变量$html
,其中包含一个像这样的html表:
$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>";
我写的正则表达式是这个
$html = preg_replace_callback(
'#(<tr.*?<th>.*?<th>.*?<\/tr>)#s',
function($match) {
return '<thead>' . $match[0] . '</thead>';
},
$html);
但我得到的结果与我想要的不同。
现在,我将tr
变为另一个thead
。
答案 0 :(得分:0)
尝试使用正则表达式解析HTML不是一个好主意。
那就是说,你需要摆脱一个问号,这会给你无限但尽可能少的问号。对于第一个和最后一个<th>
之间的空格,您希望它尽可能多。这将是诀窍:
#this is supposed to be as greedy as possible
#
~(<tr.*?<th>.*<th>.*?</tr>)~s
答案 1 :(得分:0)