Qt正则表达式从第一个匹配的第一个到最后一个匹配的结尾进行选择

时间:2015-06-21 14:05:38

标签: regex qt qregexp

我正在使用QRegExp来设置文件中的某些目录。 所有这些都以“R:/ 开头,以 .c”结束。所以我使用了“R:/(。*)。c”正则表达式语句。

但是下面的文字有一个匹配:

文字:

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个匹配。

我搜索了答案,并为。* 找到了;像“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;

3 个答案:

答案 0 :(得分:1)

您可以使用此正则表达式: R:.*\.c

<强> Demo

答案 1 :(得分:1)

Qt Regexp中{​​{1}}运算符通常是贪心的。您可以致电setMinimal(true)

来更改此设置

贪婪的正则表达式尝试尽可能多地消耗,因此表现与您遇到的完全一样。最小正则表达式尝试尽可能少地匹配。这应该可以解决您的问题,因为匹配将停留在*字符

答案 2 :(得分:0)

使用否定的字符类。

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