Qt Regex 帮助(数组键)

Qt Regex Help (Array Keys)

好的,下面的字符串是我的正则表达式将尝试匹配的内容:

[key1][key2][key3]

这是我的正则表达式。

\[(.+?)\]

这一切都是在 Qt 中完成的,这是我正在使用的代码

QRegExp reg("\[(.+?)\]");
reg.indexIn(string);
qDebug() << "Matches: " << reg.capturedTexts();

上面returns这个:

("", "")

那么两个问题:

  1. 为什么捕获是空的
  2. 在我的正则表达式中,为什么我需要输入 \\ 才能正常工作?如果我只是放 \ 它不会捕获任何东西。

谢谢!

首先,让我们优化您的正则表达式:使用 [^\]]+ 代替 .+? 不情愿的表达式,这样您就可以避免所谓的 catastrophic backtracking。新表达式如下:

\[([^\]]+)\]

On my regex, why did I need to put \ for it to work?

因为正则表达式经过两个注意反斜杠的编译器 - 首先是您的 C++ 编译器,然后是 QRegExp 构造函数中的正则表达式编译器。该对的第一个斜线用于 C++ 编译器;第二个是正则表达式编译器。一旦 C++ 编译器完成,每对反斜杠将替换为单个斜杠,这是正则表达式所需要的。

I got key1, but now how do I get the other 2? reg.capturedCount() returns 1

您的正则表达式一次捕获一个方括号 - 分隔项。如果你想全部捕获它们,你需要一个循环:

int pos = 0;
while (pos >= 0) {
     pos = reg.indexIn(str, pos);
     if (pos >= 0) {
         ++pos;      // move along in str
         qDebug() << "Matches: " << reg.capturedTexts();
     }
}