有以下代码片段:
QRegularExpression Reg("^\\[ABC=\\d+.?\\d*\\]\\n$");
if(line.contains(Reg))
{
curABC = line.mid(5,line.length()-7);
}
在最后一行中,外人可能不清楚数字“5”和“7”的来源。
5是片段“[ABC=”
的长度,7是“[ABC=]\n”的长度。
好方法,最后一行应该带入表格中:
curABC = line.mid(QString("[ABC=").length(), line.length() - QString("[ABC=]\n).length())
但不是每次都计算值的愿望,这是已知的,创建变量似乎也不是最好的解决方案,另一方面,也许编译器本身会明白该方法将始终返回 5 和 7,然后您可以使用上面编写的选项。
首先,您不必在一个地方做所有事情,因为正则表达式中有可以单独隔离的分组(参见文档
QRegularExpression)*:关于这个问题 - 这完全取决于实现的细节
QString以及编译器的智能程度。在实践中,答案几乎肯定是否定的。为了显式强制编译器在编译时计算某个值,C++11 引入了
constexpr. 为了使用constexpr-strings,C++17 引入了std::string_view. 所以现在你可以做这样的事情:当然,不要忘记好的旧管 Cish 方法:
*
\n替换为\s*为了软化语法,例如这不相关,但这通常是所需的行为