Получить $ argv из строки с переполнением стека

Мы знаем, что легко можем получить массив аргументов из командной строки с предопределенной переменной $argv,

Есть ли простой способ получить массив из строки вместо командной строки?
Мне нужно написать несколько тестов для связанной библиотеки.

Например, когда вы запускаете script.php -a b -c d, в script.php,
ты мог бы получить $argv со значением ["script.php", "-a", "b", "-c", "d"],
Итак, мой вопрос в том, что внутри сценария php
как я могу получить этот массив из строки, скажем, "-a b -c d" здесь не путем передачи строки в командную строку, а в переменную?

Мне не нужно разбирать варианты здесь.

Самый простой способ сделать это:

$array = preg_split ("/\s+/", $str);

Однако это не может покрывать строки пробелами внутри значения параметра.
Сказать:

-a "some thing"

0

Решение

Хорошо, никто не ответил на это, я бы предложил одно решение здесь:

function getArgv ($string) {
global $argv;
preg_match_all ('/(?<=^|\s)([\'"]?)(.+?)(?<!\\\\)\1(?=$|\s)/', $string, $ms);
$argv = $ms[2];
}

getArgv("-a b -c d");
print_r ($argv);
getArgv('-a \'b  -c d\' -c "da  fwe\" a" awf="sadf"');
print_r ($argv);

Выход:

Array(
[0] => -a
[1] => b
[2] => -c
[3] => d
)
Array
(
[0] => -a
[1] => b  -c d
[2] => -c
[3] => da  fwe\" a
[4] => awf="sadf")
2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]