2012-08-08 22 views
0

在正則表達式中真的很差,提前很抱歉!帶有兩個分隔符的PHP preg_split並且只捕獲一個

我已經盡力解決如何將字符串拆分爲具有兩個分隔符的數組,並仍然捕獲一個並將其包含在最終數組中。 preg_split似乎是理想的,但我的正則表達式讓我失望。

例如,如果我有字符串foo = bar AND bar=foo;我想分割在任一空間的字符串,或=字符,但保持=所以陣列看起來像:

Array 
(
    [0] => foo 
    [1] => = 
    [2] => bar 
    [3] => AND 
    [4] => bar 
    [5] => = 
    [6] => foo 
) 

不幸的是,我得到這個:

Array 
(
    [0] => foo 
    [1] => 
    [2] => = 
    [3] => 
    [4] => bar 
    [5] => AND 
    [6] => bar 
    [7] => = 
    [8] => foo 
) 

我我在這裏用這個代碼(在PHP中):

<!doctype html> 
<?php 

$string = 'foo = bar AND bar=foo'; 

$array = preg_split('/ +|(=)/', $string, -1, PREG_SPLIT_DELIM_CAPTURE); 

?> 
<pre> 
<?php 

print_r($array); 

?> 
</pre> 

我真的很感激任何幫助,你們可以給,謝謝大家!

回答

1

添加PREG_SPLIT_NO_EMPTY標誌:

$string = 'foo = bar AND bar=foo'; 
$array = preg_split('/ +|(=)/', $string, -1, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY); 

現在,this outputs

Array 
(
    [0] => foo 
    [1] => = 
    [2] => bar 
    [3] => AND 
    [4] => bar 
    [5] => = 
    [6] => foo 
) 
+0

你知道有時候,我真的是沖洗!謝謝! – 2012-08-08 15:02:17

1

要麼使用PREG_SPLIT_NO_EMPTY核彈攻擊 「空」 的比賽:

$array = preg_split('/ +|(=)/', $string, -1, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY); 

或者,change the regex這樣它不會產生空的匹配:

$array = preg_split('/ +|(?<!\G)(=)/', $string, -1, PREG_SPLIT_DELIM_CAPTURE); 
相關問題