C++ Qt正则表达式帮助(数组键)
好的,下面的字符串是我的正则表达式将尝试匹配的字符串:C++ Qt正则表达式帮助(数组键),c++,regex,qt,qt-creator,C++,Regex,Qt,Qt Creator,好的,下面的字符串是我的正则表达式将尝试匹配的字符串: [key1][key2][key3] 这是我的正则表达式 \[(.+?)\] 这一切都是在Qt中完成的,下面是我正在使用的代码 QRegExp reg("\\[(.+?)\\]"); reg.indexIn(string); qDebug() << "Matches: " << reg.capturedTexts(); 那么有两个问题: 为什么捕获是空的 在我的正则表达式上,为什么我需要放\\才能使它工作?如果
[key1][key2][key3]
这是我的正则表达式
\[(.+?)\]
这一切都是在Qt中完成的,下面是我正在使用的代码
QRegExp reg("\\[(.+?)\\]");
reg.indexIn(string);
qDebug() << "Matches: " << reg.capturedTexts();
那么有两个问题:
谢谢大家! 首先,让我们优化正则表达式:不要使用
+?
不情愿的表达式,而是使用[^\]+
,这样可以避免所谓的错误。新的表述如下:
\\[([^\\]]+)\\]
在我的正则表达式上,为什么我需要放置\\
才能让它工作
因为ReGEX通过两个关注反斜杠的编译器——第一,C++编译器,然后在代码> QReXEP 构造函数内的正则表达式编译器。对的第一个斜杠是C++编译器;第二个是针对regex编译器的。一旦C++编译器完成,每对后缀被替换成一个单一的斜线,这是正则表达式需要的。 我得到了
key1
,但是现在我如何得到另外2个呢reg.capturedCount()
返回1
正则表达式一次捕获一个方括号分隔的项。如果您想捕获它们,您需要一个循环:
int pos = 0;
while (pos >= 0) {
pos = reg.indexIn(str, pos);
if (pos >= 0) {
++pos; // move along in str
qDebug() << "Matches: " << reg.capturedTexts();
}
}
int pos=0;
而(位置>=0){
pos=reg.indexIn(str,pos);
如果(位置>=0){
++pos;//在str中向前移动
qDebug()你能试试\\[([^\]]+)\\]
吗?好的,我得到了key1,但是现在我怎么得到另外2个呢?reg.captureCount()返回1。有没有办法打开全局修饰符?我试着做了/../g,但返回了一个空字符串。
int pos = 0;
while (pos >= 0) {
pos = reg.indexIn(str, pos);
if (pos >= 0) {
++pos; // move along in str
qDebug() << "Matches: " << reg.capturedTexts();
}
}