我试图保留preg_split分隔符(< tr>和< / tr>),而不将它分隔到新的数组位置,并且无法弄清楚它。所以任何帮助都将不胜感激。
我试图从下一个html代码中获取每一行并将其放在不同的数组位置:
<tr><td> one column </td><td>second column</td></tr><tr><td> one column </td><td>second column</td></tr>
以下是我所拥有的:
array_unique(preg_split('[<tr[^>]*>(.*?)</tr>]',$table,NULL,PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY));
如果我对我的数组执行var_dump,则此代码显示:
array(2) {
[0]=>
string(43) "<td> one column </td><td>second column</td>"
[1]=>
string(43) "<td> one column </td><td>second column</td>"
}
我想要的是:
array(2) {
[0]=>
string(52) "<tr><td> one column </td><td>second column</td></tr>"
[1]=>
string(52) "<tr><td> one column </td><td>second column</td></tr>"
}
事先,非常感谢你的帮助和时间。
答案 0 :(得分:1)
只需捕获<tr>
标记。由于您正在使用PREG_SPLIT_DELIM_CAPTURE
参数,因此也会返回正在捕获的字符。
array_unique(preg_split('[(<tr[^>]*>.*?</tr>)]',$table,NULL,PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY));
示例1:
$st = '<tr><td> one column </td><td>second column</td></tr><tr><td> one column </td><td>second column</td></tr>';
$match = preg_split('[(<tr[^>]*>.*?</tr>)]',$st,NULL,PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY);
print_r($match);
<强>输出:强>
Array
(
[0] => <tr><td> one column </td><td>second column</td></tr>
[1] => <tr><td> one column </td><td>second column</td></tr>
)
示例2:
$st = '<tr><td> one column </td><td>second column</td></tr><tr><td> one column </td><td>second column</td></tr>';
$match = array_unique(preg_split('[(<tr[^>]*>.*?</tr>)]',$st,NULL,PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY));
print_r($match);
<强>输出:强>
Array
(
[0] => <tr><td> one column </td><td>second column</td></tr>
)
答案 1 :(得分:1)
请勿使用preg_split。你想使用preg_match_all:
preg_match_all('[<tr[^>]*>.*?</tr>]', $table, $matches, PREG_PATTERN_ORDER);
$rows = $matches[0];
但很少有问题:你为什么要使用array_unique?为什么要使用正则表达式解析HTML?请改用xpath之类的东西。