2013-08-29 26 views
0

我想用逗號分割一個列表。原來,preg_split正在完成基本目標。用戶可以在項目之間輸入任何組合[space(s)],[space(s)],並且列表將成功拆分。PHP正則表達式用逗號分割,忽略引用的項目

$items = 'one, two , three ,four, five'; 
$items = preg_split('/(\s*,\s*)+/', $items); 

這導致['one', 'two', 'three', 'four', 'five']正確。我想以擴大此允許逃脫通過報價分隔符,如:

$items = 'one, "two , three",four, five'; 

期望的結果['one', 'two , three', 'four', 'five']

我相信答案是preg_match_all,但似乎無法把拼圖碎片連同獨特的約束條件。

請注意,str_getcsv在這種情況下不起作用,因爲間距會使最終字符串偏斜。

回答

2

你解析CSV字符串,所以你可以使用:

$result = str_getcsv($items); 

這將導致:

array(4) { 
    [0]=> 
    string(3) "one" 
    [1]=> 
    string(11) "two , three" 
    [2]=> 
    string(4) "four" 
    [3]=> 
    string(7) " five" 
} 

然後,您可以刪除所有與周圍的元素空白:

$result = array_map('trim', $result); 
+0

天才。我完全是過度思考! :D將盡可能接受。 – jterry

+0

是否適合特殊字符?因爲,如果特殊字符是第一個字母,str_getcsv會首先刪除特殊字符 – bla0009

相關問題