2015-03-02 64 views
0

我试图保持preg_split分隔符(< tr>和</tr>),而不将它分开放置在新的数组位置,并且无法弄清楚。所以任何帮助将不胜感激。Preg_split,如何保持分隔符?

我试图采取从下一个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>" 
    } 

事先,非常感谢您的帮助和时间。

回答

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> 
) 
+0

太棒了,像魅力一样工作。你摇滚的人! 非常感谢! – user3321425 2015-03-02 09:22:20

1

不要使preg_split这一点。你想使用preg_match_all:

preg_match_all('[<tr[^>]*>.*?</tr>]', $table, $matches, PREG_PATTERN_ORDER); 
$rows = $matches[0]; 

虽然几个问题:你为什么要用array_unique?你为什么要用正则表达式解析HTML?改用xpath之类的东西。

+0

感谢您的评论。您的解决方案也可行!我正在使用array_unique,因为我正在过滤数组结果而不存储重复的行。我使用PHPexcel中的表格构建数组数据并删除重复的行。 – user3321425 2015-03-02 12:07:54

相关问题