Как разобрать командную строку с регулярными выражениями? - PullRequest
6 голосов
/ 13 октября 2008

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

"param 1" param2 "param 3"

должно привести к:

парам 1, парам2, парам 3

Ответы [ 13 ]

0 голосов
/ 13 октября 2008

Если вас интересуют только кавычки, просто напишите простой цикл, чтобы выводить символ за символом в строку, игнорируя кавычки.

В качестве альтернативы, если вы используете какую-либо библиотеку для работы со строками, вы можете использовать ее, чтобы удалить все кавычки и затем объединить их.

0 голосов
/ 13 октября 2008

(читая ваш вопрос еще раз, непосредственно перед публикацией, я отмечаю, что вы говорите, что командная строка НРАВИТСЯ строка, таким образом, эта информация может быть бесполезна для вас, но, как я уже писал, я все равно опубликую - не обращайте внимания, если я неправильно понял вашу вопрос.)

Если вы уточните свой вопрос, я постараюсь помочь, но из общих замечаний, которые вы сделали, я бы сказал, не делайте этого :-), вы просите регулярное выражение, чтобы разбить серию параметров на массив. Вместо того, чтобы делать это самостоятельно, я настоятельно рекомендую вам использовать getopt, есть версии этой библиотеки для большинства языков программирования. Getopt сделает то, что вы просите, и масштабирует для управления более сложной обработкой аргументов, если вам потребуется это в будущем.

Если вы сообщите мне, какой язык вы используете, я постараюсь опубликовать образец для вас.

Вот пример домашней страницы:

http://www.codeplex.com/getopt (.NET)

http://www.urbanophile.com/arenn/hacking/download.html (Java)

Пример (со страницы Java выше)

 Getopt g = new Getopt("testprog", argv, "ab:c::d");
 //
 int c;
 String arg;
 while ((c = g.getopt()) != -1)
   {
     switch(c)
       {
          case 'a':
          case 'd':
            System.out.print("You picked " + (char)c + "\n");
            break;
            //
          case 'b':
          case 'c':
            arg = g.getOptarg();
            System.out.print("You picked " + (char)c + 
                             " with an argument of " +
                             ((arg != null) ? arg : "null") + "\n");
            break;
            //
          case '?':
            break; // getopt() already printed an error
            //
          default:
            System.out.print("getopt() returned " + c + "\n");
       }
   }
0 голосов
/ 13 октября 2008

Что-то вроде:

"(?:(?<=")([^"]+)"\s*)|\s*([^"\s]+)

или более простой:

"([^"]+)"|\s*([^"\s]+)

(просто ради нахождения регулярного выражения;))

Примените его несколько раз, и группа № 1 даст вам параметр, независимо от того, заключен он в двойные кавычки или нет.

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