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 之类的东西。