2013-04-15 53 views
1

我正在嘗試做一些必須非常簡單的事情,但我對PHP相當陌生,而且我正在爲此付出努力。我想要的是分割包含0,1個或更多分隔符(大括號)的字符串,同時保持分隔符AND字符串與字符串之間的外部。拆分字符串,同時保持分隔符和字符串外部

例如:'你好{F} {N},你好嗎?'將輸出:

Array ([0] => Hello 
     [1] => {F} 
     [2] => {N} 
     [3] => , how are you?) 

這裏是到目前爲止我的代碼:

$value = 'Hello {F}{N}, how are you?'; 
$array= preg_split('/[\{\}]/', $value,-1, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY); 
print_r($array); 

其輸出(缺少大括號):

Array ([0] => Hello 
     [1] => F 
     [2] => N 
     [3] => , how are you?) 

我也試過:

preg_match_all('/\{[^}]+\}/', $myValue, $array); 

它輸出(大括號在那裏,但外面的文字是沖洗的):

Array ([0] => {F} 
     [1] => {N}) 

我很確定我在preg_split的良好軌道上,但錯誤的正則表達式。誰能幫我這個?或者告訴我,如果我走了嗎?

+0

你有沒有嘗試過上面的preg_split調用你的第二個正則表達式? – mario

回答

1

您不捕獲分隔符。它們添加到一個捕獲組:

/(\{.*?\})/ 
+0

感謝你和@PleaseStand爲你的答案,他們都工作!我閱讀了括號,但並沒有完全理解這個概念。 –

0

您需要周圍的表達式部分括號被捕獲:

preg_split('/(\{[^}]+\})/', $myValue, -1, PREG_SPLIT_DELIM_CAPTURE); 

查看文檔preg_split()