Preg_split,如何保留分隔符?
Preg_split, how to keep delimiter?
我试图保留 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>"
}
在此之前,非常感谢您的帮助和时间。
只需捕获 <tr>
标签。由于您正在使用 PREG_SPLIT_DELIM_CAPTURE
参数,因此这也会 return 正在捕获的字符。
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>
)
不要为此使用 preg_split。你想使用 preg_match_all:
preg_match_all('[<tr[^>]*>.*?</tr>]', $table, $matches, PREG_PATTERN_ORDER);
$rows = $matches[0];
但有几个问题:您为什么要使用 array_unique?为什么要使用正则表达式解析 HTML?请改用 xpath 之类的东西。
我试图保留 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>"
}
在此之前,非常感谢您的帮助和时间。
只需捕获 <tr>
标签。由于您正在使用 PREG_SPLIT_DELIM_CAPTURE
参数,因此这也会 return 正在捕获的字符。
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>
)
不要为此使用 preg_split。你想使用 preg_match_all:
preg_match_all('[<tr[^>]*>.*?</tr>]', $table, $matches, PREG_PATTERN_ORDER);
$rows = $matches[0];
但有几个问题:您为什么要使用 array_unique?为什么要使用正则表达式解析 HTML?请改用 xpath 之类的东西。