QRegExp 解析函数名称
QRegExp to parse function name
我有以下两种情况:
int test(asdf1234, 245234)
virutal void TEST::test(asdf1234, 123)
我想从它们中获取函数名称"test"。
我知道我可以使用以下内容来实现这一点:
QRegExp regex("...some regex...");
regex.indexIn(str);
foreach (QString part, regex.capturedTexts()) {
qDebug() << part;
}
但是我在弄清楚如何构建正则表达式时遇到了问题。
有什么想法吗?
(::|s+)(.+)(
应该可能工作。 以上翻译为:两个冒号或一些空格,后跟一个或多个字符,后跟一个左括号。
请注意,在 c++ 中编写上述任一语句时,您必须转义正则表达式中的反斜杠。 所以第一条语句看起来像:
QRegExp regex("::(.+)\(");
如果您想更好地尝试和学习正则表达式,我会检查 http://regexr.com/。
生成的捕获组将显示捕获的所有内容,然后显示表达式中括号中包含的内容。 在这种情况下,(.+)
是唯一一组参数,因此它将是捕获组 1。
如果你想变得非常花哨,尝试只获取函数的有效 c++ 标准名称,而不是意外地选择9asdf%$#
作为函数名称,您可以使用:
([A-Za-z_][A-Za-z_d]+)
(::|s+)([A-Za-z_][A-Za-z_d]*)s*(
或者,如果你想非常具体地针对这两种类型的函数调用,你可以做一些事情:
((virutal void [A-Za-z_][A-Za-z_d]*::)|(ints+))([A-Za-z_][A-Za-z_d]+)s*(
翻译过来就是:找到短语virtual void _____::
或int
,后面跟一些单词,后跟一些可选的空格,然后是一个开放的parethesis。
您要查找的捕获组可能是:4,因为计算左括号。
同样对于 QRegExp,如果你想让 * 或 + 成为贪婪的运算符,你必须使用 setMinimal(false);
http://doc.qt.io/qt-5/qregexp.html#setMinimal
另外请务必查看:
http://doc.qt.io/qt-5/qregularexpression.html
QRegularExpression
相似,但与QRegExp
相比有一些优势。 QRegExp
年纪大了一点,可能有更多例子。
希望有帮助。
- "error: no matching function for call to"构造函数错误
- 什么时候调用组成单元对象的析构函数
- 继承函数的重载解析
- 为什么随机数生成器不在void函数中随机化数字,而在main函数中随机化
- C++模板来检查友元函数的存在
- 递归函数计算序列中的平方和(并输出过程)
- 对RValue对象调用的LValue ref限定成员函数
- C++17复制构造函数,在std::unordereded_map上进行深度复制
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- 在C++STL中是否有Polyval(Matlab函数)等价物?
- 为什么使用 "this" 指针调用派生成员函数?
- 将对象数组的引用传递给函数
- 函数调用中参数的顺序重要吗
- 函数向量_指针有不同的原型,我可以构建一个吗
- 使用不带参数的函数访问结构元素
- 代码在main()中运行,但在函数中出现错误
- 内置函数可查看CPP中的成员变量
- 如何获取std::result_of函数的返回类型
- 如何在c++中为模板函数实例创建快捷方式
- QRegExp 解析函数名称