正規表現 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;

上記で test を出力し、文字列内の単語 test と一致させたいと思っていましたが、そうしていないようです。誰かがここで光を当てることができますか? QT の使用。


答え:


正規表現にキャプチャ用の括弧がないため、キャプチャ グループ 1 はありません。代わりにこれを試してください:


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

いくつかのコードの回答


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