Browse Source

Consider brackets within wildcard as regular characters

In glob patterns, square brackets have a special meaning, that may be unexpected by the users.

Thus we escape these brackets, so that the only remaining special characters are the * and ? wildcards.

PR #16965.
adaptive-webui-19844
vlakoff 3 years ago committed by GitHub
parent
commit
b84333f8a1
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 17
      src/base/utils/string.cpp

17
src/base/utils/string.cpp

@ -32,11 +32,10 @@ @@ -32,11 +32,10 @@
#include <cmath>
#include <QLocale>
#include <QRegularExpression>
#include <QVector>
#if (QT_VERSION >= QT_VERSION_CHECK(6, 0, 0))
#include <QRegularExpression>
#else
#if (QT_VERSION < QT_VERSION_CHECK(6, 0, 0))
#include <QRegExp>
#endif
@ -56,7 +55,11 @@ QString Utils::String::fromDouble(const double n, const int precision) @@ -56,7 +55,11 @@ QString Utils::String::fromDouble(const double n, const int precision)
#if (QT_VERSION >= QT_VERSION_CHECK(6, 0, 0))
QString Utils::String::wildcardToRegexPattern(const QString &pattern)
{
return QRegularExpression::wildcardToRegularExpression(pattern, QRegularExpression::UnanchoredWildcardConversion);
// replace [ and ] with [[] and []], respectively
QString escapedPattern = pattern;
escapedPattern.replace(QRegularExpression(u"\\[|\\]"_qs), u"[\\0]"_qs);
return QRegularExpression::wildcardToRegularExpression(escapedPattern, QRegularExpression::UnanchoredWildcardConversion);
}
#else
// This is marked as internal in QRegExp.cpp, but is exported. The alternative would be to
@ -65,7 +68,11 @@ QString qt_regexp_toCanonical(const QString &pattern, QRegExp::PatternSyntax pat @@ -65,7 +68,11 @@ QString qt_regexp_toCanonical(const QString &pattern, QRegExp::PatternSyntax pat
QString Utils::String::wildcardToRegexPattern(const QString &pattern)
{
return qt_regexp_toCanonical(pattern, QRegExp::Wildcard);
// replace [ and ] with [[] and []], respectively
QString escapedPattern = pattern;
escapedPattern.replace(QRegularExpression(u"\\[|\\]"_qs), u"[\\0]"_qs);
return qt_regexp_toCanonical(escapedPattern, QRegExp::Wildcard);
}
#endif

Loading…
Cancel
Save