【问题标题】:How can I explode a string into an array by space, but preserve quoted words?如何按空格将字符串分解为数组,但保留引用的单词?
【发布时间】:2015-07-08 20:42:22
【问题描述】:

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

[0] => abc
[1] => def ghi

其他例子:

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

【问题讨论】:

  • 你甚至用explode标记了它,那么问题出在哪里?
  • 爆炸不起作用。但我发现 str_getcsv() 让我完成同样的工作,保留引号。
  • 为什么explode('"', $str); 不适合你?
  • 因为我还希望 abc def 返回数组 ['abc','def']
  • @Ryan 接受的答案并不总是最好、正确或最适合您的用例。 :) 但是问题不应该重复。 - 问题是在 PHP5.3 之后引入 str_getcsv() 的时候。

标签: php regex parsing explode


【解决方案1】:

str_getcsv()

$str = 'abc "def ghi"';
$arr = str_getcsv($str, ' ', '"');
print_r($arr);

返回:

Array
(
    [0] => abc
    [1] => def ghi
)

【讨论】:

    【解决方案2】:

    你可以使用:

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

    【讨论】:

    • 谢谢。使用 preg_match_all() 而不是 str_getcsv() 有什么优势吗?
    • 它是另一种选择。老实说,我没有进行任何性能测试,但我的感觉是preg_match_all 的性能可能会更好。
    猜你喜欢
    • 2018-05-27
    • 2017-07-08
    • 1970-01-01
    • 1970-01-01
    • 2022-07-29
    • 1970-01-01
    • 2014-02-09
    • 1970-01-01
    • 2014-11-28
    相关资源
    最近更新 更多