Reguläre Ausdrücke C++ Qt

 C Programming >> C-Programmierung >  >> Tags >> Qt
Reguläre Ausdrücke C++ Qt


QRegExp rx("\\btest\\b");
rx.indexIn("this is a test string");
QString captured = rx.cap(1);
std::string capturedstr = captured.toUtf8().constData();
std::cout << capturedstr;

Ich wollte, dass das obige Test ausdruckt und das Wort test innerhalb der Zeichenfolge abgleicht, aber das scheint es nicht zu tun. Könnte hier jemand Licht ins Dunkel bringen? Verwendung von QT.


Antworten:


Sie haben keine einfangenden Klammern in Ihrer Regex, also gibt es keine Einfanggruppe 1. Versuchen Sie stattdessen Folgendes:


QRegExp rx("\\b(test)\\b");

Einige Code-Antworten


QRegularExpression re("a pattern");
QRegularExpression re;
re.setPattern("another pattern");
// matches two digits followed by a space and a word QRegularExpression re("\\d\\d \\w+");
// matches a backslash QRegularExpression re2("\\\\");
// matches two digits followed by a space and a word QRegularExpression re(R"(\d\d \w+)");
QRegularExpression re("a third pattern");
QString pattern = re.pattern();
// pattern == "a third pattern"
// matches "Qt rocks", but also "QT rocks", "QT ROCKS", "qT rOcKs", etc. QRegularExpression re("Qt rocks", QRegularExpression::CaseInsensitiveOption);
QRegularExpression re("^\\d+$");
re.setPatternOptions(QRegularExpression::MultilineOption);
// re matches any line in the subject string that contains only digits (but at least one)
QRegularExpression re = QRegularExpression("^two.*words$", QRegularExpression::MultilineOption| QRegularExpression::DotMatchesEverythingOption);
QRegularExpression::PatternOptions options = re.patternOptions();
// options == QRegularExpression::MultilineOption | QRegularExpression::DotMatchesEverythingOption
// match two digits followed by a space and a word QRegularExpression re("\\d\\d \\w+");
QRegularExpressionMatch match = re.match("abc123 def");
bool hasMatch = match.hasMatch();
// true
QRegularExpression re("\\d\\d \\w+");
QRegularExpressionMatch match = re.match("abc123 def");
if (match.hasMatch()) {
QString matched = match.captured(0);
// matched == "23 def"
// ... }
QRegularExpression re("\\d\\d \\w+");
QRegularExpressionMatch match = re.match("12 abc 45 def", 1);
if (match.hasMatch()) {
QString matched = match.captured(0);
// matched == "45 def"
// ... }
QRegularExpression re("^(\\d\\d)/(\\d\\d)/(\\d\\d\\d\\d)$");
QRegularExpressionMatch match = re.match("08/12/1985");
if (match.hasMatch()) {
QString day = match.captured(1);
// day == "08"
QString month = match.captured(2);
// month == "12"
QString year = match.captured(3);
// year == "1985"
// ... }
QRegularExpression re("abc(\\d+)def");
QRegularExpressionMatch match = re.match("XYZabc123defXYZ");
if (match.hasMatch()) {
int startOffset = match.capturedStart(1);
// startOffset == 6
int endOffset = match.capturedEnd(1);
// endOffset == 9
// ... }
QRegularExpression re("^(?<date>\\d\\d)/(?<month>\\d\\d)/(?<year>\\d\\d\\d\\d)$");
QRegularExpressionMatch match = re.match("08/12/1985");
if (match.hasMatch()) {
QString date = match.captured("date");
// date == "08"
QString month = match.captured("month");
// month == "12"
QString year = match.captured("year");
// year == 1985 }
QRegularExpression re("(\\w+)");
QRegularExpressionMatchIterator i = re.globalMatch("the quick fox");
QStringList words;
while (i.hasNext()) {
QRegularExpressionMatch match = i.next();
QString word = match.captured(1);
words << word;
} // words contains "the", "quick", "fox"
// using a raw string literal, R"(raw_characters)", to be able to use "\w" // without having to escape the backslash as "\\w" QRegularExpression re(R"(\w+)");
QString subject("the quick fox");
for (const QRegularExpressionMatch &match : re.globalMatch(subject)) {
// ... }
QString pattern("^(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) \\d\\d?, \\d\\d\\d\\d$");
QRegularExpression re(pattern);
QString input("Jan 21,");
QRegularExpressionMatch match = re.match(input, 0, QRegularExpression::PartialPreferCompleteMatch);
bool hasMatch = match.hasMatch();
// false bool hasPartialMatch = match.hasPartialMatch();
// true
QString input("Dec 8, 1985");
QRegularExpressionMatch match = re.match(input, 0, QRegularExpression::PartialPreferCompleteMatch);
bool hasMatch = match.hasMatch();
// true bool hasPartialMatch = match.hasPartialMatch();
// false
QRegularExpression re("abc\\w+X|def");
QRegularExpressionMatch match = re.match("abcdef", 0, QRegularExpression::PartialPreferCompleteMatch);
bool hasMatch = match.hasMatch();
// true bool hasPartialMatch = match.hasPartialMatch();
// false QString captured = match.captured(0);
// captured == "def"
QRegularExpression re("abc\\w+X|defY");
QRegularExpressionMatch match = re.match("abcdef", 0, QRegularExpression::PartialPreferCompleteMatch);
bool hasMatch = match.hasMatch();
// false bool hasPartialMatch = match.hasPartialMatch();
// true QString captured = match.captured(0);
// captured == "abcdef"
QRegularExpression re("abc|ab");
QRegularExpressionMatch match = re.match("ab", 0, QRegularExpression::PartialPreferFirstMatch);
bool hasMatch = match.hasMatch();
// false bool hasPartialMatch = match.hasPartialMatch();
// true
QRegularExpression re("abc(def)?");
QRegularExpressionMatch match = re.match("abc", 0, QRegularExpression::PartialPreferFirstMatch);
bool hasMatch = match.hasMatch();
// false bool hasPartialMatch = match.hasPartialMatch();
// true
QRegularExpression re("(abc)*");
QRegularExpressionMatch match = re.match("abc", 0, QRegularExpression::PartialPreferFirstMatch);
bool hasMatch = match.hasMatch();
// false bool hasPartialMatch = match.hasPartialMatch();
// true
QRegularExpression invalidRe("(unmatched|parenthesis");
bool isValid = invalidRe.isValid();
// false
QRegularExpression invalidRe("(unmatched|parenthesis");
if (!invalidRe.isValid()) {
QString errorString = invalidRe.errorString();
// errorString == "missing )"
int errorOffset = invalidRe.patternErrorOffset();
// errorOffset == 22
// ... }
QString escaped = QRegularExpression::escape("a(x) = f(x) + g(x)");
// escaped == "a\\(x\\)\\ \\=\\ f\\(x\\)\\ \\+\\ g\\(x\\)"
QString pattern = "(" + QRegularExpression::escape(name) +
"|" + QRegularExpression::escape(nickname) + ")";
QRegularExpression re(pattern);
auto reOptions = cs == Qt::CaseSensitive ? QRegularExpression::NoPatternOption :
QRegularExpression::CaseInsensitiveOption;
return QRegularExpression(wildcardToRegularExpression(str, options), reOptions);
    (?<day>\d\d)-(?<month>\d\d)-(?<year>\d\d\d\d) (\w+) (?<name>\w+)
    ("", "day", "month", "year", "", "name")
QString wildcard = QRegularExpression::wildcardToRegularExpression("*.jpeg");
// Will match files with names like: // foo.jpeg // f_o_o.jpeg // föö.jpeg