我正在解析一些字符串。如果遇到“ Foo(bar)”之类的东西,我想提取“ Foo”和“ bar”
如何使用QRegExp进行操作?
答案 0 :(得分:3)
第一件事,如果您使用的是Qt 5,请使用QRegularExpression类
Qt 5中引入的QRegularExpression类是QRegExp的一项重大改进,在提供的API,支持的模式语法和执行速度方面。
第二,获得一个可视化工具,该工具在测试/定义正则表达式时会有所帮助,我使用在线website。
要从您的示例中获取“ Foo”和“ Bar”,我可以建议以下模式:
(\w+)\((\w+)\)
--------------
The above means:
(\w+) - Capture one or more word characters (capture group 1)
\( - followed by a opening brace
(\w+) - then capture one or more word characters (capture group 2)
\) - followed by a closing brace
必须转义此模式才能在Qt正则表达式中直接使用:
const QRegularExpression expression( "(\\w+)\\((\\w+)\\)" );
QRegularExpressionMatch match = expression.match( "Foo(bar)" );
if( match.hasMatch() ) {
qDebug() << "0: " << match.captured( 0 ); // 0 is the complete match
qDebug() << "1: " << match.captured( 1 ); // First capture group
qDebug() << "2: " << match.captured( 2 ); // Second capture group
}
输出为:
0: "Foo(bar)"
1: "Foo"
2: "bar"
在线查看运行中的模式here。将鼠标悬停在“表达式”框中的部件上以查看说明,或将鼠标悬停在“文本”部件上以查看结果。