Qt Regex 帮助(数组键)
Qt Regex Help (Array Keys)
好的,下面的字符串是我的正则表达式将尝试匹配的内容:
[key1][key2][key3]
这是我的正则表达式。
\[(.+?)\]
这一切都是在 Qt 中完成的,这是我正在使用的代码
QRegExp reg("\[(.+?)\]");
reg.indexIn(string);
qDebug() << "Matches: " << reg.capturedTexts();
上面returns这个:
("", "")
那么两个问题:
- 为什么捕获是空的
- 在我的正则表达式中,为什么我需要输入 \\ 才能正常工作?如果我只是放 \ 它不会捕获任何东西。
谢谢!
首先,让我们优化您的正则表达式:使用 [^\]]+
代替 .+?
不情愿的表达式,这样您就可以避免所谓的 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();
}
}
好的,下面的字符串是我的正则表达式将尝试匹配的内容:
[key1][key2][key3]
这是我的正则表达式。
\[(.+?)\]
这一切都是在 Qt 中完成的,这是我正在使用的代码
QRegExp reg("\[(.+?)\]");
reg.indexIn(string);
qDebug() << "Matches: " << reg.capturedTexts();
上面returns这个:
("", "")
那么两个问题:
- 为什么捕获是空的
- 在我的正则表达式中,为什么我需要输入 \\ 才能正常工作?如果我只是放 \ 它不会捕获任何东西。
谢谢!
首先,让我们优化您的正则表达式:使用 [^\]]+
代替 .+?
不情愿的表达式,这样您就可以避免所谓的 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();
}
}