我正在使用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;
答案 0 :(得分:1)
您可以使用此正则表达式: R:.*\.c
<强> Demo 强>
答案 1 :(得分:1)
Qt Regexp中{{1}}运算符通常是贪心的。您可以致电setMinimal(true)
贪婪的正则表达式尝试尽可能多地消耗,因此表现与您遇到的完全一样。最小正则表达式尝试尽可能少地匹配。这应该可以解决您的问题,因为匹配将停留在*
字符
答案 2 :(得分:0)
使用否定的字符类。
"R:/[^.]*[.]c"