QRegExp提取数组名称和索引

时间:2019-01-09 02:48:41

标签: c++ qt

我正在解析一些字符串。如果遇到“ Foo(bar)”之类的东西,我想提取“ Foo”和“ bar”

如何使用QRegExp进行操作?

1 个答案:

答案 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。将鼠标悬停在“表达式”框中的部件上以查看说明,或将鼠标悬停在“文本”部件上以查看结果。