Regex doesn't seem to work with Qt
-
@Petross404_Petros-S said in Regex doesn't seem to work with Qt:
QRegExp re{"//file type.*//g"}; // Even without escaping it, it doesn't capture anything.
Given you're using
QRegExp
(wouldn't make any difference ifQRegularExpression
anyway). Where did you get the idea this is suitable input for it? It is not.So my question is does Qt5 have a different syntax for regular expressions or am I missing something else here?
This regex here
(/file type.*/g)
You seem to be assuming that what you see on that page you reference is literally what you can use elsewhere. Though even then you have changed it. And you seem to have selected for JavaScript.
wrote on 15 Jun 2021, 18:20 last edited by@JonB said in Regex doesn't seem to work with Qt:
@Petross404_Petros-S said in Regex doesn't seem to work with Qt:
QRegExp re{"//file type.*//g"}; // Even without escaping it, it doesn't capture anything.
Given you're using
QRegExp
(wouldn't make any difference ifQRegularExpression
anyway). Where did you get the idea this is suitable input for it? It is not.So my question is does Qt5 have a different syntax for regular expressions or am I missing something else here?
This regex here
(/file type.*/g)
You seem to be assuming that what you see on that page you reference is literally what you can use elsewhere. Though even then you have changed it. And you seem to have selected for JavaScript.
Oh sorry then, how could I miss this?
-
wrote on 15 Jun 2021, 18:34 last edited by VRonin
the
/g
is not how you set the regex to globalconst QRegularExpression regExp(QStringLiteral(R"***(file type.*)***")); QRegularExpressionMatchIterator regExpMatch = regExp.globalMatch(input); while (regExpMatch .hasNext()) { const QRegularExpressionMatch match = regExpMatch .next(); qDebug() << match.capturedRef(0); }
-
Hi,
Are you trying to use file glob pattern ?
-
the
/g
is not how you set the regex to globalconst QRegularExpression regExp(QStringLiteral(R"***(file type.*)***")); QRegularExpressionMatchIterator regExpMatch = regExp.globalMatch(input); while (regExpMatch .hasNext()) { const QRegularExpressionMatch match = regExpMatch .next(); qDebug() << match.capturedRef(0); }
wrote on 16 Jun 2021, 15:37 last edited by@VRonin said in Regex doesn't seem to work with Qt:
the
/g
is not how you set the regex to globalconst QRegularExpression regExp(QStringLiteral(R"***(file type.*)***")); QRegularExpressionMatchIterator regExpMatch = regExp.globalMatch(input); while (regExpMatch .hasNext()) { const QRegularExpressionMatch match = regExpMatch .next(); qDebug() << match.capturedRef(0); }
Yes, it seems that it needed a different approach. This works:
QString str{output}; //The output from the first post. const QRegularExpression regExp(QStringLiteral(R"***(file type.*)***")); QRegularExpressionMatch regExpMatch = regExp.match(str); QString strFileType {regExpMatch.captured(0)}; //"file type elf64-x86-64." if(strFileType.contains("file type") && strFileType.contains(".")) { strFileType.replace("file type ", ""); strFileType.replace(".", ""); } That was a little qDebug() << strFileType; // "elf64-x86-64"
Thank you all.
-
wrote on 16 Jun 2021, 15:39 last edited by
@SGaist said in Regex doesn't seem to work with Qt:
Hi,
Are you trying to use file glob pattern ?
Yes but in the wrong way. Thank you for your interest.
-
@VRonin said in Regex doesn't seem to work with Qt:
the
/g
is not how you set the regex to globalconst QRegularExpression regExp(QStringLiteral(R"***(file type.*)***")); QRegularExpressionMatchIterator regExpMatch = regExp.globalMatch(input); while (regExpMatch .hasNext()) { const QRegularExpressionMatch match = regExpMatch .next(); qDebug() << match.capturedRef(0); }
Yes, it seems that it needed a different approach. This works:
QString str{output}; //The output from the first post. const QRegularExpression regExp(QStringLiteral(R"***(file type.*)***")); QRegularExpressionMatch regExpMatch = regExp.match(str); QString strFileType {regExpMatch.captured(0)}; //"file type elf64-x86-64." if(strFileType.contains("file type") && strFileType.contains(".")) { strFileType.replace("file type ", ""); strFileType.replace(".", ""); } That was a little qDebug() << strFileType; // "elf64-x86-64"
Thank you all.
wrote on 16 Jun 2021, 15:49 last edited by@Petross404_Petros-S said in Regex doesn't seem to work with Qt:
strFileType.contains(".")
.
in regexp has a special menaing. if you want to match the literal dot you have to escape it -
@Petross404_Petros-S said in Regex doesn't seem to work with Qt:
strFileType.contains(".")
.
in regexp has a special menaing. if you want to match the literal dot you have to escape itwrote on 16 Jun 2021, 16:27 last edited by Petross404_Petros S@VRonin said in Regex doesn't seem to work with Qt:
@Petross404_Petros-S said in Regex doesn't seem to work with Qt:
strFileType.contains(".")
.
in regexp has a special menaing. if you want to match the literal dot you have to escape itInteresting because it actually removed the dot. When I used it like " \. " it didn't work.
EDIT It doesn't show the \ characters I used above. -
wrote on 16 Jun 2021, 16:33 last edited by
My bad, I wasn't clear.
.
in QRegularExpression mean any character.strFileType.replace(".", "");
is correct but unnecessary:QString str{output}; //The output from the first post. const QRegularExpression regExp(QStringLiteral(R"***(file type\s*(.*)\.)***")); QRegularExpressionMatch regExpMatch = regExp.match(str); qDebug() << regExpMatch.captured(0); //"file type elf64-x86-64." QString strFileType = regExpMatch.captured(1); qDebug() << strFileType; //"elf64-x86-64"
-
QRegularExpression::wildcardToRegularExpression is what you were looking for.
-
QRegularExpression::wildcardToRegularExpression is what you were looking for.
wrote on 17 Jun 2021, 11:17 last edited by@SGaist said in Regex doesn't seem to work with Qt:
QRegularExpression::wildcardToRegularExpression is what you were looking for.
I am afraid I can't use this function since it is very recent and compatiblity with Qt5.4 is needed. But thank you.
@VRonin thank you too, your example was to the point. I will take a deeper look at what you did there. Thanks again.
15/15