- QT5中使用正则表达式建议使用QRegularExpression,不再使用QRegExp
- QRegularExpression较之QRegExp进行了优化改进
主要使用的类
主要功能
QRegularExpression re("a pattern");
QRegularExpression re;
re.setPattern("another pattern");
QRegularExpression re("a third pattern");
QString pattern = re.pattern(); // pattern == "a third pattern"
// 不区分大小写
QRegularExpression re("Qt rocks", QRegularExpression::CaseInsensitiveOption);
// 多行匹配
QRegularExpression re("^\\d+$");
re.setPatternOptions(QRegularExpression::MultilineOption);
QRegularExpression re = QRegularExpression("^two.*words$", QRegularExpression::MultilineOption |
QRegularExpression::DotMatchesEverythingOption);
QRegularExpression::PatternOptions options = re.patternOptions();
// options == QRegularExpression::MultilineOption | QRegularExpression::DotMatchesEverythingOption
模式中的捕获组从 1 开始编号,隐式捕获组编号 0 用于捕获与整个模式匹配的子字符串。
// 检测是否匹配成功
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"
}
// 从偏移量1开始匹配字符串
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"
}
// 提取字符串 使用captured(int nth = 0)
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"
}
// 提取字符串,使用captured(const QString &name)
QRegularExpression re("^(?\\d\\d)/(?\\d\\d)/(?\\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("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("(\\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"
QRegularExpression invalidRe("(unmatched|parenthesis");
if (!invalidRe.isValid()) {
QString errorString = invalidRe.errorString(); // errorString == "missing )"
int errorOffset = invalidRe.patternErrorOffset(); // errorOffset == 22
}
适用于
匹配类型
/***************QRegularExpression::PartialPreferCompleteMatch***************/
// 例子1
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 captured = match.captured(0); // captured == "Jan 21,"
// 例子2
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("Dec 8, 1985");
QRegularExpressionMatch match = re.match(input, 0, QRegularExpression::PartialPreferCompleteMatch);
bool hasMatch = match.hasMatch(); // true
bool hasPartialMatch = match.hasPartialMatch(); // false
// 例子3
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::PartialPreferFirstMatch***************/
// 例子1
QRegularExpression re("abc|ab");
QRegularExpressionMatch match = re.match("ab", 0, QRegularExpression::PartialPreferFirstMatch);
bool hasMatch = match.hasMatch(); // false
bool hasPartialMatch = match.hasPartialMatch(); // true
// 例子2
QRegularExpression re("abc(def)?");
QRegularExpressionMatch match = re.match("abc", 0, QRegularExpression::PartialPreferFirstMatch);
bool hasMatch = match.hasMatch(); // false
bool hasPartialMatch = match.hasPartialMatch(); // true
// 例子3
QRegularExpression re("(abc)*");
QRegularExpressionMatch match = re.match("abc", 0, QRegularExpression::PartialPreferFirstMatch);
bool hasMatch = match.hasMatch(); // false
bool hasPartialMatch = match.hasPartialMatch(); // true
https://blog.csdn.net/lin786063594/article/details/125301089?spm=1001.2014.3001.5501
QT帮助文档