2015-03-02 60 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

相關問題