RegExp, чтобы найти аргументы командной строки

Я работаю в терминальной программе для выполнения приложений на удаленных машинах.
Вы можете передать команду, как в Windows cmd.exe, например:

"C:\random Directory\datApplication.py" "validate" -r /c "C:\anotherDirectory"

чтобы сделать это возможным, мне приходится иметь дело с текстом в кавычках и анализировать команду и ее аргументы из этой строки.
в блокноте ++ я нашел RegExp, чтобы исправить их (([^" \t\n]+)|("[^"]*"))+ и это работает. в Qt4.8.1 Я старался:

static const QRegExp re("(([^\" \\t\\n]+)|(\"[^\"]*\"))+");
re.matchExact(str); // str is something like shown above
qDebug() << re.capturedTexts();

и этот код только печатает меня 3 раза "C:\random Directory\datApplication.py" и больше ничего.
он должен распечатать каждый аргумент, введенный как один объект …

что я могу сделать, чтобы это работало?

РЕШЕНИЕ: (спасибо Линдриану)

const QString testText = "\"C:\\random Directory\\datApplication.py\" \"validate\" -r /c \"C:\\anotherDirectory\"";
static const QRegExp re("([^\" \\t\\n]+|\"[^\"]*\")+");
int pos = 0;
while ((pos = re.indexIn(testText)) != -1) //-i indicates that nothing is found
{
const int len = re.matchedLength();
qDebug() << testText.mid(pos,len);
pos += len;
}

2

Решение

FTFY: ([^" \t\n]+|"[^"]*")

(Вы просто злоупотребляли ссылками)

Убедитесь, что вы фиксируете все результаты.

Демо-версия: http://regex101.com/r/pR8oF5

3

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

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

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