diff options
-rw-r--r-- | src/corelib/io/qdir.cpp | 2 | ||||
-rw-r--r-- | src/corelib/tools/qregularexpression.cpp | 16 | ||||
-rw-r--r-- | src/corelib/tools/qregularexpression.h | 6 | ||||
-rw-r--r-- | src/corelib/tools/qstringlist.cpp | 4 | ||||
-rw-r--r-- | src/gui/util/qvalidator.cpp | 2 | ||||
-rw-r--r-- | src/widgets/dialogs/qfilesystemmodel.cpp | 6 |
6 files changed, 28 insertions, 8 deletions
diff --git a/src/corelib/io/qdir.cpp b/src/corelib/io/qdir.cpp index 85ea2cb139..39422c3401 100644 --- a/src/corelib/io/qdir.cpp +++ b/src/corelib/io/qdir.cpp @@ -2129,7 +2129,7 @@ bool QDir::match(const QStringList &filters, const QString &fileName) QString wildcard = QRegularExpression::wildcardToRegularExpression(*sit); // Insensitive exact match // (see Notes for QRegExp Users in QRegularExpression's documentation) - QRegularExpression rx(QLatin1String("\\A(?:") + wildcard + QLatin1String(")\\z"), + QRegularExpression rx(QRegularExpression::anchoredPattern(wildcard), QRegularExpression::CaseInsensitiveOption); if (rx.match(fileName).hasMatch()) return true; diff --git a/src/corelib/tools/qregularexpression.cpp b/src/corelib/tools/qregularexpression.cpp index 1bd06a73cd..6f0e572f41 100644 --- a/src/corelib/tools/qregularexpression.cpp +++ b/src/corelib/tools/qregularexpression.cpp @@ -483,6 +483,11 @@ QT_BEGIN_NAMESPACE Note the usage of the non-capturing group in order to preserve the meaning of the branch operator inside the pattern. + The QRegularExpression::anchoredPattern() helper method does exactly that for + you. + + \sa anchoredPattern + \section3 Porting from QRegExp's Partial Matching When using QRegExp::exactMatch(), if an exact match was not found, one @@ -1995,6 +2000,17 @@ QString QRegularExpression::wildcardToRegularExpression(const QString &pattern) } /*! + \fn QRegularExpression::anchoredPattern(const QString &expression) + + \since 5.12 + + Returns the expression wrapped between the \c{\A} and \c{\z} anchors to be + used for exact matching. + + \sa {Porting from QRegExp's Exact Matching} +*/ + +/*! \since 5.1 Constructs a valid, empty QRegularExpressionMatch object. The regular diff --git a/src/corelib/tools/qregularexpression.h b/src/corelib/tools/qregularexpression.h index 388aa7a8ca..f9e7029550 100644 --- a/src/corelib/tools/qregularexpression.h +++ b/src/corelib/tools/qregularexpression.h @@ -142,6 +142,12 @@ public: static QString escape(const QString &str); static QString wildcardToRegularExpression(const QString &str); + static inline QString anchoredPattern(const QString &expression) + { + return QLatin1String("\\A(?:") + + expression + + QLatin1String(")\\z"); + } bool operator==(const QRegularExpression &re) const; inline bool operator!=(const QRegularExpression &re) const { return !operator==(re); } diff --git a/src/corelib/tools/qstringlist.cpp b/src/corelib/tools/qstringlist.cpp index e9b7397a74..712ba74716 100644 --- a/src/corelib/tools/qstringlist.cpp +++ b/src/corelib/tools/qstringlist.cpp @@ -692,7 +692,7 @@ int QtPrivate::QStringList_indexOf(const QStringList *that, const QRegularExpres if (from < 0) from = qMax(from + that->size(), 0); - QString exactPattern = QLatin1String("\\A(?:") + re.pattern() + QLatin1String(")\\z"); + QString exactPattern = QRegularExpression::anchoredPattern(re.pattern()); QRegularExpression exactRe(exactPattern, re.patternOptions()); for (int i = from; i < that->size(); ++i) { @@ -722,7 +722,7 @@ int QtPrivate::QStringList_lastIndexOf(const QStringList *that, const QRegularEx else if (from >= that->size()) from = that->size() - 1; - QString exactPattern = QLatin1String("\\A(?:") + re.pattern() + QLatin1String(")\\z"); + QString exactPattern = QRegularExpression::anchoredPattern(re.pattern()); QRegularExpression exactRe(exactPattern, re.patternOptions()); for (int i = from; i >= 0; --i) { diff --git a/src/gui/util/qvalidator.cpp b/src/gui/util/qvalidator.cpp index ae4f56a12e..2237b016e9 100644 --- a/src/gui/util/qvalidator.cpp +++ b/src/gui/util/qvalidator.cpp @@ -1079,7 +1079,7 @@ void QRegularExpressionValidatorPrivate::setRegularExpression(const QRegularExpr if (origRe != re) { usedRe = origRe = re; // copies also the pattern options - usedRe.setPattern(QLatin1String("\\A(?:") + re.pattern() + QLatin1String(")\\z")); + usedRe.setPattern(QRegularExpression::anchoredPattern(re.pattern())); emit q->regularExpressionChanged(re); emit q->changed(); } diff --git a/src/widgets/dialogs/qfilesystemmodel.cpp b/src/widgets/dialogs/qfilesystemmodel.cpp index b67335822b..e4edd2f6ef 100644 --- a/src/widgets/dialogs/qfilesystemmodel.cpp +++ b/src/widgets/dialogs/qfilesystemmodel.cpp @@ -2032,10 +2032,8 @@ bool QFileSystemModelPrivate::passNameFilters(const QFileSystemNode *node) const : QRegularExpression::CaseInsensitiveOption; for (const auto &nameFilter : nameFilters) { - const QString wildcard = QLatin1String("\\A(?:") - + QRegularExpression::wildcardToRegularExpression(nameFilter) - + QLatin1String(")\\z"); - QRegularExpression rx(wildcard, options); + const QString wildcard = QRegularExpression::wildcardToRegularExpression(nameFilter); + QRegularExpression rx(QRegularExpression::anchoredPattern(wildcard), options); QRegularExpressionMatch match = rx.match(node->fileName); if (match.hasMatch()) return true; |