我正在开发一个终端程序以在远程机器上执行应用程序。您可以像在 windows cmd.exe 中一样传递命令,例如:
"C:\random Directory\datApplication.py" "validate" -r /c "C:\anotherDirectory"
为了使这成为可能,我必须处理带引号的文本并从该字符串中解析命令及其参数。在记事本++中,我找到了一个正则表达式来修补它们(([^" \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"
而已。它应该打印出作为单个对象输入的每个参数...
我该怎么做才能让它工作?
解决方案:(感谢 Lindrian)
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;
}