gpt4 book ai didi

c++ - RegExp 查找命令行参数

转载 作者:搜寻专家 更新时间:2023-10-31 01:47:18 26 4
gpt4 key购买 nike

我正在开发一个终端程序来在远程机器上执行应用程序。您可以像在 Windows cmd.exe 中一样传递命令,例如:

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

为了使之成为可能,我必须处理引用的文本并从该字符串中解析命令及其参数。在 Notepad++ 中,我找到了一个 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",仅此而已。它应该打印出作为单个对象输入的每个参数 ...

我该怎么做才能让它发挥作用?

解决方案:(感谢 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;
}

最佳答案

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

(你只是过度使用了反向引用)

确保您捕获了所有结果。

演示:http://regex101.com/r/pR8oF5

关于c++ - RegExp 查找命令行参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19363139/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com