Во-первых, если вы используете Qt 5, тогда лучше использовать QRegularExpression class
Класс QRegularExpression, представленный в Qt 5, является большим улучшением QRegExp с точки зрения предлагаемых API, поддерживаемого синтаксиса шаблонов и скорости выполнения.
Во-вторых, чтобы получить визуальный инструмент, который помогает при тестировании / определении регулярных выражений, я использую сетевой веб-сайт .
Чтобы получить "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"
Смотрите шаблон в действии онлайн здесь . Наведите указатель мыши на части в поле «Выражение», чтобы увидеть объяснения, или на часть «Текст», чтобы увидеть результат.