2013-04-04 118 views
1

我有类似abc xyz "a x" test "test1 test2"的字符串我想用空格拆分字符串,但引号内的单词应保持原样。我可以使用爆炸拆分字符串,但按照我的要求,爆炸在这里不起作用。没有引号的爆炸字符串

爆炸后/劈裂输出谨

[0] => abc 
[1] => xyz 
[2] => "a x" 
[3] => test 
[4] => "test1 test2" 

我想使preg_split为我做,但不知道正确的正则表达式。

+0

的可能重复的[爆炸字符串转换成令牌保持引述SUBSTR完整](HTTP ://stackoverflow.com/questions/5475312/explode-string-into-tokens-keeping-quoted-substr-intact) – Alex 2013-04-04 12:02:45

回答

0

那样做:

$str = 'this is a string "that has quoted text" inside.'; 

// #1 version 
$arOne = preg_split('#\s*("[^"]*")\s*|\s+#', $str, -1 , PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY); 

// #2 version 
$arTwo = preg_split('#\s*((?<!\\\\)"[^"]*")\s*|\s+#', $str, -1 , PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY); 

输出

array(6) { 
    [0]=> 
    string(4) "this" 
    [1]=> 
    string(2) "is" 
    [2]=> 
    string(1) "a" 
    [3]=> 
    string(6) "string" 
    [4]=> 
    string(22) ""that has quoted text"" 
    [5]=> 
    string(7) "inside." 
} 

从这里摘自:Post

+0

雅它为我工作 – mukund 2013-04-04 11:49:16

0

另一个很好的和简单的答案是

$str = abc xyz "a x" test "test1 test2" 
str_getcsv($str,' ','"'); 

将返回一个阵列,用于更详细地了解str_getcsv 将返回阵列由空间和劈裂没有“的

输出上述

[0] => abc 
[1] => xyz 
[2] => a x 
[3] => test 
[4] => test1 test2