Php 如何按空格将字符串分解为数组,但保留引用的单词?

Php 如何按空格将字符串分解为数组,但保留引用的单词?,php,regex,parsing,explode,Php,Regex,Parsing,Explode,给定字符串abc“def ghi”,如何返回数组: [0] => abc [1] => def ghi 其他例子: abc "def ghi" => ['abc','def ghi'] abc def => ['abc','def'] 返回: Array ( [0] => abc [1] => def ghi ) 您可以使用: $s = 'abc "def ghi"'; preg_match_all('/(?

给定字符串abc“def ghi”,如何返回数组:

[0] => abc
[1] => def ghi
其他例子:

abc "def ghi"   =>   ['abc','def ghi']
abc def         =>   ['abc','def']

返回:

Array
(
    [0] => abc
    [1] => def ghi
)
您可以使用:

$s = 'abc "def ghi"';
preg_match_all('/(?>"[^"]*"|\S+)/', $s, $m);

print_r($m[0]);
Array
(
    [0] => abc
    [1] => "def ghi"
)

您甚至用
explode
标记了它,那么问题出在哪里?explode不起作用。但是我找到了str_getcsv(),让我完成同样的任务,保留引号。
explode(“,$str);
为什么不适合您?因为我还希望
abc def
返回数组['abc','def']@Ryan被接受的答案并不总是最好、正确或最适合您的用例。:)但无论如何,问题不应该重复。-当str_getcsv()被引入时,问题就在PHP5.3之后。谢谢。使用preg_match_all()而不是str_getcsv()是否有优势?这是另一种选择。老实说,我没有进行任何性能测试,但我的感觉是,
preg\u match\u all
的性能可能会更好。
$s = 'abc "def ghi"';
preg_match_all('/(?>"[^"]*"|\S+)/', $s, $m);

print_r($m[0]);
Array
(
    [0] => abc
    [1] => "def ghi"
)