Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ Qt正则表达式帮助(数组键)_C++_Regex_Qt_Qt Creator - Fatal编程技术网

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();
         }
    }