diff --git a/src/file/regexpcache.h b/src/file/regexpcache.h --- a/src/file/regexpcache.h +++ b/src/file/regexpcache.h @@ -23,6 +23,7 @@ #define REGEXP_CACHE_H_ #include +#include #include class RegExpCache @@ -37,6 +38,7 @@ private: QList m_regexpCache; + QSet m_exactMatches; }; #endif diff --git a/src/file/regexpcache.cpp b/src/file/regexpcache.cpp --- a/src/file/regexpcache.cpp +++ b/src/file/regexpcache.cpp @@ -36,6 +36,9 @@ bool RegExpCache::exactMatch(const QString& s) const { + if (m_exactMatches.contains(s)) { + return true; + } for (const QRegularExpression& filter : qAsConst(m_regexpCache)) { if (filter.match(s).hasMatch()) { return true; @@ -47,8 +50,13 @@ void RegExpCache::rebuildCacheFromFilterList(const QStringList& filters) { m_regexpCache.clear(); + m_exactMatches.clear(); for (const QString& filter : filters) { QString f = filter; + if (!f.contains(QLatin1Char('*')) && !f.contains(QLatin1Char('?'))) { + m_exactMatches += f; + continue; + } f.replace(QLatin1Char('.'), QStringLiteral("\\.")); f.replace(QLatin1Char('?'), QLatin1Char('.')); f.replace(QStringLiteral("*"), QStringLiteral(".*"));