QRegExp для извлечения имени массива и индекса - PullRequest
0 голосов
/ 09 января 2019

Я анализирую некоторые строки. Если я сталкиваюсь с чем-то вроде «Foo (bar)», я хочу извлечь «Foo» и «bar»

Как мне сделать это с помощью QRegExp?

1 Ответ

0 голосов
/ 09 января 2019

Во-первых, если вы используете 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"

Смотрите шаблон в действии онлайн здесь . Наведите указатель мыши на части в поле «Выражение», чтобы увидеть объяснения, или на часть «Текст», чтобы увидеть результат.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...