2015-06-21 119 views
0

我正在使用QRegExp來創建文件中的某些目錄。 他們全部以「R:/開始,並以.C」完成。所以我用「R:/(。*).c」正則表達式語句。Qt正則表達式從第一場比賽開始到最後一場比賽結束

但它具有以下文本1場:

文字:

mov  f1, dsa 
lis  r9, sdefwf "R:/frori.c" 
addi  r3, r9, cwrfg "R:/DWors.c" 
li  r4, 0*uy 
dfr  R:/DWors.c 
dew  d2, fref 

匹配的文本:

frori.c" 
addi  r3, r9, cwrfg "R:/DWors.c" 
li  r4, 0*uy 
dfr  R:/DWors 

匹配的情況下開始與第一R:並與結束最後.c的文字,但我需要在這個例子中檢測3個匹配。

我搜索了答案,並找到 for 。*;如「R:/(。*?)。c」聲明必須導致我的示例。(不匹配)

我想要一個正則表達式語句,在我的文本中找到3個匹配項。

--------------------------------------------- -------------------------------------------------- -------------

更新: 也許我錯了使用QRegExp函數。

這裏是我的代碼:

QString fileName = QFileDialog::getOpenFileName(this, tr("Open Text file"), "", tr("All Files (*.*)")); 

QFile file(fileName); 
if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) 
    return; 

QString str; 
QString dir; 

while (!file.atEnd()) { 
    str = file.readAll(); 
} 

QRegExp rx("R:(.*)\.c"); 

int pos = 0; 

while ((pos = rx.indexIn(str, pos)) != -1) { 
     dir.append(rx.cap(1)); 
     dir.append('\n'); 
     pos += rx.matchedLength(); 
    } 

qDebug() << dir; 

回答

1

*運營商通常是在Qt的正則表達式的貪婪。你可以通過調用setMinimal(true)

來改變這種情況。貪婪的正則表達式試圖儘可能地消耗,因此其行爲與你所經歷的一樣。最小正則表達式嘗試儘可能少地匹配。這應該可以解決您的問題,因爲匹配將停止在c字符

0

使用否定的字符類。

"R:/[^.]*[.]c" 
1

你可以使用這個表達式:R:.*\.c

Demo