2015-06-21 134 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

相关问题