$str = '<tr>
<td>First thing</td>
<td>some stuff <b>150</b></td>
<td>350</td>
<td>250</td>
</tr>
<tr>
<td>Second thing</td>
<td>150</td>
<td>350</td>
<td>250</td>
</tr>';
理想的输出:
找到单词“ First”的开头,然后将每个字符串放入TD之后,以TR结尾,而不是第二行。
方法:
我知道我可以使用几个嵌套的preg_match_callback()
或者我可以使用HTML DOM内容
但是出于代码的原因,我想看看使用子模式在正则表达式中是否可行。
// This is what I have so far...
preg_match_all('~
<td>
(
(?:
(?!</td). # absolutely no idea what this does
)*
)
</td>
~isx', $str, $m);
print_r($m);
答案 0 :(得分:0)
好吧,所以我这样解决了:
$pos = stripos($str, "First");
$html_TR = substr($str, $pos, stripos($str, '</tr>', $pos));
$pattern = '~ <td> (?: (?!(<td>|</td>)). | (?R) )*+ </td> ~x';
preg_match_all($pattern, $html_TR, $matches);
$html_TDs = $matches[0];
print_r($html_TDs);
不是终极解决方案,但它会做到:(
我想我必须使用2个递归子模式来匹配TR,但我做不到。