Аргументы с регулярным выражением - PullRequest
0 голосов
/ 20 декабря 2009

Я хотел бы знать, как разбить эту строку:
команда arg1 arg2 arg3
В этом массиве:

[arg1,arg2,arg3]

НО, если пользователь вводит:
команда "arg1 still arg1" arg2
Массив будет:

[arg1 still arg1, arg2]

Использование PHP

Ответы [ 3 ]

2 голосов
/ 20 декабря 2009

Используйте регулярное выражение, подобное этому:

^[^ ]+(?: ("[^"]+"|[^ ]+))*$

Выражение "[^"]+"|[^ ]+ соответствует либо аргументу, который начинается и заканчивается кавычкой, либо аргументу, который заканчивается в следующем пробеле.

1 голос
/ 20 декабря 2009

PHP делает то, что вы спрашиваете автоматически.

У меня PHP 5.3, и я вызываю этот код

<?php
  print $argc . "\n";

  for ($i = 0; $i < $argc; $i++) {
    print $argv[$i] . "\n";
  }
?>

с php ./argv.php Test "Test 23" "Test 34", я получаю следующий вывод

sunradio:~ kiamlaluno$ php ./argv.php Test "Test 23" "Test 34"
4
./argv.php
Test
Test 23
Test 34
sunradio:~ kiamlaluno$

Сняв первый аргумент, $argv содержит все аргументы так, как вы хотите. Это можно легко сделать с помощью array_pop().

0 голосов
/ 20 декабря 2009

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

См. Этот комментарий к документации: http://www.php.net/manual/en/function.strtok.php#94463

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...