2013-10-31 35 views
1

我是新來的正則表達式,我想在分隔符上分割一個字符串,同時在每個數組元素的開頭保留該分隔符。我試了一下失敗,並想出了:PHP preg_split同時保持數組元素開頭的分隔符

$str = 'LOTS OF STUFF AND SOME MORE STUFF AND SOME OTHER STUFF'; 
    $matches = preg_split('/(\ AND)/', $str, null, PREG_SPLIT_DELIM_CAPTURE); 

這使分隔符作爲自己的元素:

[0]=>"LOTS OF STUFF" 
[1]=>" AND" 
[2]=>" SOME MORE STUFF" 
[3]=>" AND" 
[4]=>" SOME OTHER STUFF" 

但我想保持分隔符在元素的開頭:

[0]=>"LOTS OF STUFF" 
[1]=>" AND SOME MORE STUFF" 
[2]=>" AND SOME OTHER STUFF" 

我想也許我可以做它試圖使用一個後視,但後來我又失去了分隔符:

$matches = preg_split('/(?<=\s)AND/', $str, null, PREG_SPLIT_DELIM_CAPTURE); 

[0]=>"LOTS OF STUFF" 
[1]=>" SOME MORE STUFF" 
[2]=>" SOME OTHER STUFF" 

想得到一些幫助,謝謝!

回答

6

使用lookahead assertion(?=))以字符串位置拆分,隨後通過AND

$str = 'LOTS OF STUFF AND SOME MORE STUFF AND SOME OTHER STUFF'; 
$matches = preg_split('/ (?=AND)/', $str); 
var_dump($matches); 
/* 
array(3) { 
    [0]=> 
    string(13) "LOTS OF STUFF" 
    [1]=> 
    string(19) "AND SOME MORE STUFF" 
    [2]=> 
    string(20) "AND SOME OTHER STUFF" 
} 
*/ 

Demo。此代碼刪除AND之前的空格;如果它不是你想要的,只需要刪除正則表達式中的空白。

相關問題