Взорвать белые пробелы в строке, исключая то, что внутри кавычек

Я не могу понять, как взорвать белые пробелы в строке, исключая то, что внутри кавычек. Я нашел несколько регулярных выражений, которые могут выполнять эту работу, но особенность здесь заключается в том, что кавычкам предшествует знак равенства:

string = 'arg1="value1" arg2="value2" arg3="value3 value4 value5"';

Я смог выделить то, что содержится внутри кавычек, но я не могу получить полную пару arg1="value1 value2"

Спасибо за вашу помощь.

2 ответа

$test = 'arg1="value1" arg2="value2" arg3="value3 value4 value5"';
preg_match_all('#([a-zA-Z0-9]+)="([^"]+)"#', $test, $matches);
var_dump($matches);

Возвращает:

array(3) {
 [0]=>
 array(3) {
 [0]=>
 string(13) "arg1="value1""
 [1]=>
 string(13) "arg2="value2""
 [2]=>
 string(27) "arg3="value3 value4 value5""
 }
 [1]=>
 array(3) {
 [0]=>
 string(4) "arg1"
 [1]=>
 string(4) "arg2"
 [2]=>
 string(4) "arg3"
 }
 [2]=>
 array(3) {
 [0]=>
 string(6) "value1"
 [1]=>
 string(6) "value2"
 [2]=>
 string(20) "value3 value4 value5"
 }
}

Образец здесь.


Попробуй это

licensed under cc by-sa 3.0 with attribution.