Регулярное выражение находит только первый параметр в Qt5 - PullRequest
0 голосов
/ 06 ноября 2019

Что не так с моим регулярным выражением? Согласно плану должно быть два элемента, но определен только первый. Qt5.12 MinGW32 Windows 7x86.

QRegExp rx("\\d+");
QString buf_last;
buf_last.append("read0_1");
rx.indexIn(buf_last);
auto try_step     = rx.cap(0).toInt();
auto current_step = rx.cap(1).toInt();
qDebug() << try_step << current_step << buf_last << "rx___" << rx.cap(0)
         << rx.cap(1) << rx.capturedTexts();

отчет об ошибках

1 Ответ

2 голосов
/ 06 ноября 2019

Здесь нет ошибки, все в соответствии с документацией и тем, как работают RE в целом.

Если вы пытаетесь найти каждую цифру в строке, используя QRegExp, вам нужно выполнить цикл. Один из способов сделать это:

int main(int , char **)
{
  QRegExp rx("\\d+");
  QString buf_last("read0_1");
  int idx = 0;
  do {
    idx = rx.indexIn(buf_last, idx);
    if (idx < 0)
      break;
    qDebug() << rx.cap(0);
    idx += rx.cap(0).length();
  } while (idx < buf_last.length());

  return 0;
}
"0"
"1"

Это только один способ, особенно фактический стиль кода цикла. Использование QRegularExpression может быть намного более эффективным, в зависимости от ваших потребностей. Но нахождение произвольного числа таких цифр повлечет за собой цикл где-то.

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