正则表达式仅在Qt5中找到第一个参数

我的正则表达式怎么了?根据计划,应该有两个要素,但仅定义第一个要素。 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();

bug-report

lizhc 回答:正则表达式仅在Qt5中找到第一个参数

这里没有bug,这完全取决于文档以及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可能会更有效率。但是找到这样的任意数字将在某处涉及循环。

本文链接:https://www.f2er.com/3154889.html

大家都在问