QRegExp 解析函数名称

QRegExp to parse function name

本文关键字:函数 QRegExp      更新时间:2023-10-16

我有以下两种情况:

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年纪大了一点,可能有更多例子。

希望有帮助。