2013-04-04 7 views
1

У меня есть строка как abc xyz "a x" test "test1 test2" Я хочу разделить строку с пробелом, но слово внутри цитаты должно оставаться таким, какое есть. Я могу разделить строку, используя взрыв, но взорвать не будет работать в соответствии с моим требованием.взрывоопасная строка, у которой нет знака цены

После взрыва/вывода spliting хотел

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

Я думаю preg_split сделать для меня, но не знаю, правильное регулярное выражение.

+0

возможного дубликата [взрываются строки в лексемы сохраняя цитируемый зиЬзЬг нетронутого] (HTTP : //stackoverflow.com/questions/5475312/explode-string-into-tokens-keeping-quoted-substr-intact) – Alex

ответ

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

ya это сработало для меня – mukund

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 
Смежные вопросы