2012-05-23 145 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