2012-05-23 143 views
1

我有這樣的字符串:PHP的preg_match混亂

$string = '"lorem ipsum","dolor, sit","amet"'; 

我試圖使用,以爆炸,的preg_match讓每個內「」的元素本身就是一個字符串,繪製原串入數組中。

最終會給我什麼;

$array[0] = 'lorem ipsum'; 
$array[1] = 'dolor, sit'; 
$array[2] = 'amet'; 

一些字符串將要包含逗號其間所以我試圖爆炸將它們分開,然後更換或preg_matching之間提取嘗試「..」失敗。

我該如何達到預期的目標?

謝謝。

回答

1

你應該更換你的組合函數的具體功能是: str_getcsv

$array = str_getcsv($string, ',', '"'); 

(選項增加了清晰度)

+0

你好!這解決了像魔術一樣的問題!這怎麼可能?天才!謝謝! ;-) – Phil

+0

@Phil php有許多有用的函數:-) – jeroen

1

此代碼需要反覆解析你的字符串到它的組成部分:

$array = array(); 
while (preg_match('/^"([^"]*)"(?:,(.*)|$)/', $string, $match)) { 
    $array[] = $match[1]; 
    $string = @$match[2]; 
} 
+0

我不知道,如果正則表達式在這裏工作,因爲它不產生在我的情況下,任何的結果嗎?謝謝。 – Phil

+0

我修改了一下代碼,因爲我的原始版本在最後一個元素中留下了引號。我已經與你的樣品輸入測試它,和它的作品: 陣列 ( [0] => Lorem存有 [1] =>悲,坐 [2] =>阿梅德 ) – lanzz

+0

非常感謝你! – Phil

0

你所尋找的是preg_split

$string = preg_split("/,[^\s+]/", '"lorem ipsum","dolor, sit","amet"'); 
print_r($string); 

>

Array 
(
    [0] => "lorem ipsum" 
    [1] => dolor, sit" 
    [2] => amet" 
) 
+0

謝謝你的回答。不過,我相信這是一個問題。它應該把 - >(0)lorem ipsum(1)多爾,坐(2)amet – Phil