2011-11-21 128 views
1

Qt的正則表達式(C++)沒有按我期望的那樣工作。例如,在以下行(空格作爲句號)Qt正則表達式不匹配

.....mRNA............complement(join(<85666..86403,86539..>86727)) 

「表達」 不匹配:

QRegExp rxItem("^\\s{5}(\\w+)") ; 

而是由以下匹配:

QRegExp rxItem("\\s{4}(\\w+)") ; 

所以它看起來好像行的開始和第一個空間由於某種原因未被識別。我檢查了QRegExp的Qt文檔,並且據我所知,「^」表示一行的開始,\和s是Perl中的空格。

任何想法?

乾杯

+0

空間的數量對您而言是否重要?如果不是,則匹配零個或多個'\ s *(\ w +)'或一個或多個'\ s +(\ w +)'。 – trojanfoe

+0

空間數量恐怕很重要。 – nrhorner

+0

看起來像一個錯誤,然後你的匹配字符串看起來不錯。 – trojanfoe

回答

4

下面的代碼:

#include <QtCore/QRegExp> 
#include <QtCore/QString> 
#include <QtCore/QDebug> 

int main(int argc, char *argv[]) 
{ 
    QString test = "  mRNA   complement(join(<85666 86403,86539 >86727))"; 
    QRegExp rxItem("^\\s{5}(\\w+)"); 

    if(rxItem.indexIn(test) != -1) 
    { 
     qDebug() << "Matched" << rxItem.cap(1); 
    } 
    else 
    { 
     qDebug() << "No match"; 
    } 

    return 0; 
} 

顯示

Matched "mRNA" 

所以它似乎是工作。你有沒有把indexIn返回的結果作爲錯誤處理?

+0

謝謝蒂姆。在打印捕獲的文本之前,我正在查找indexIn返回的值> 0。你的方式有效。 – nrhorner