QT QRegularExpression не соответствует - PullRequest
0 голосов
/ 08 марта 2019

Мой код:

QRegularExpression reg("^(.*) .*"); 
QString match = reg.match("help a").captured(1);

Это должно сработать, а также проверить, когда я запускаю его на веб-сайте тестирования регулярных выражений.Я что-то пропустил?Редактировать: я пытался удалить '^' из шаблона, и он работает.

1 Ответ

1 голос
/ 08 марта 2019

В этом RE нет захваченной группы 1. Группы захвата индексируются с нуля, поэтому, если вы хотите help, вы должны использовать:

QRegularExpression reg("^(.*) .*"); 
reg.match("help a").captured(0);
//                           ^

Если вы хотите a, вы должны изменить RE, чтобы захватить его:

//                            v  v
QRegularExpression reg("^(.*) (.*)");   // "^.* (.*)" if you don't want 'help'
reg.match("help a").captured(1);        // 0          if you don't want 'help'

И, конечно, вам, вероятно, следует проверить, чтобы оно совпадало, прежде чем пытаться использовать любое из этих совпадений. Это можно сделать с помощью функции QRegularExpressionMatch::hasMatch().

Возможно, 1016 *, что лучший способ перехватить первое слово (определяемое любым набором символов, кроме пробела) - это явно разрешить это:

^ *([^ ]*)

Это будет работать лучше, если у вас есть несколько пробелов после первого слова, а также допускаются пробелы перед словом.

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