0

我正在使用 QRegExp 来获取文件中的一些目录。它们都以"R:/开头并以.c" 结尾。所以我使用了“R:/(.*).c”正则表达式语句。

但它与以下文本有 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 个匹配项。

我搜索了答案,发现? 对于.* ; 像“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;
4

3 回答 3

1

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

演示

于 2015-06-21T14:56:52.480 回答
1

*运算符在 Qt Regexp 中通常是贪婪的。您可以通过调用更改此设置setMinimal(true)

贪婪的正则表达式尝试尽可能多地消耗,因此行为与您所经历的完全一样。最小正则表达式尝试尽可能少地匹配。c这应该可以解决您的问题,因为匹配将在字符处停止

于 2015-06-22T09:06:24.167 回答
0

使用否定字符类。

"R:/[^.]*[.]c"
于 2015-06-21T14:08:04.023 回答