diff options
author | Giuseppe D'Angelo <dangelog@gmail.com> | 2012-03-13 07:24:27 +0000 |
---|---|---|
committer | Qt by Nokia <qt-info@nokia.com> | 2012-03-21 11:43:30 +0100 |
commit | 865949520252d7c0e5a78f4bb2c195f090f1f601 (patch) | |
tree | 90287a059c44fbccedfd86d7feec927d7f1b08cb /src/corelib/tools/qstringlist.cpp | |
parent | 054b69c963990f4e62a1eee8a475b228944369c9 (diff) |
QRegularExpression: support for QStringList overloads
Change-Id: Ia9017348742e41187684185d04b56d27edd383b5
Reviewed-by: Lars Knoll <lars.knoll@nokia.com>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Diffstat (limited to 'src/corelib/tools/qstringlist.cpp')
-rw-r--r-- | src/corelib/tools/qstringlist.cpp | 117 |
1 files changed, 117 insertions, 0 deletions
diff --git a/src/corelib/tools/qstringlist.cpp b/src/corelib/tools/qstringlist.cpp index b4ec0c6498..50e155db81 100644 --- a/src/corelib/tools/qstringlist.cpp +++ b/src/corelib/tools/qstringlist.cpp @@ -41,6 +41,7 @@ #include <qstringlist.h> #include <qset.h> +#include <qregularexpression.h> QT_BEGIN_NAMESPACE @@ -304,6 +305,28 @@ QStringList QtPrivate::QStringList_filter(const QStringList *that, const QRegExp } #endif +#ifndef QT_BOOTSTRAPPED +#ifndef QT_NO_REGEXP +/*! + \fn QStringList QStringList::filter(const QRegularExpression &re) const + \overload + \since 5.0 + + Returns a list of all the strings that match the regular + expression \a re. +*/ +QStringList QtPrivate::QStringList_filter(const QStringList *that, const QRegularExpression &re) +{ + QStringList res; + for (int i = 0; i < that->size(); ++i) { + if (that->at(i).contains(re)) + res << that->at(i); + } + return res; +} +#endif // QT_NO_REGEXP +#endif // QT_BOOTSTRAPPED + /*! \fn QStringList &QStringList::replaceInStrings(const QString &before, const QString &after, Qt::CaseSensitivity cs) @@ -357,6 +380,39 @@ void QtPrivate::QStringList_replaceInStrings(QStringList *that, const QRegExp &r } #endif +#ifndef QT_BOOTSTRAPPED +#ifndef QT_NO_REGEXP +/*! + \fn QStringList &QStringList::replaceInStrings(const QRegularExpression &re, const QString &after) + \overload + \since 5.0 + + Replaces every occurrence of the regular expression \a re, in each of the + string lists's strings, with \a after. Returns a reference to the string + list. + + For example: + + \snippet doc/src/snippets/qstringlist/main.cpp 5 + \snippet doc/src/snippets/qstringlist/main.cpp 16 + + For regular expressions that contain capturing groups, + occurrences of \b{\\1}, \b{\\2}, ..., in \a after are + replaced with the string captured by the corresponding capturing group. + + For example: + + \snippet doc/src/snippets/qstringlist/main.cpp 5 + \snippet doc/src/snippets/qstringlist/main.cpp 17 +*/ +void QtPrivate::QStringList_replaceInStrings(QStringList *that, const QRegularExpression &re, const QString &after) +{ + for (int i = 0; i < that->size(); ++i) + (*that)[i].replace(re, after); +} +#endif // QT_NO_REGEXP +#endif // QT_BOOTSTRAPPED + /*! \fn QString QStringList::join(const QString &separator) const @@ -542,6 +598,67 @@ int QtPrivate::QStringList_lastIndexOf(const QStringList *that, QRegExp &rx, int } #endif +#ifndef QT_BOOTSTRAPPED +#ifndef QT_NO_REGEXP +/*! + \fn int QStringList::indexOf(const QRegularExpression &re, int from) const + \overload + \since 5.0 + + Returns the index position of the first match of \a re in + the list, searching forward from index position \a from. Returns + -1 if no item matched. + + \sa lastIndexOf() +*/ +int QtPrivate::QStringList_indexOf(const QStringList *that, const QRegularExpression &re, int from) +{ + if (from < 0) + from = qMax(from + that->size(), 0); + + QString exactPattern = QLatin1String("\\A(?:") + re.pattern() + QLatin1String(")\\z"); + QRegularExpression exactRe(exactPattern, re.patternOptions()); + + for (int i = from; i < that->size(); ++i) { + QRegularExpressionMatch m = exactRe.match(that->at(i)); + if (m.hasMatch()) + return i; + } + return -1; +} + +/*! + \fn int QStringList::lastIndexOf(const QRegularExpression &re, int from) const + \overload + \since 5.0 + + Returns the index position of the last exact match of \a re in + the list, searching backward from index position \a from. If \a + from is -1 (the default), the search starts at the last item. + Returns -1 if no item matched. + + \sa indexOf() +*/ +int QtPrivate::QStringList_lastIndexOf(const QStringList *that, const QRegularExpression &re, int from) +{ + if (from < 0) + from += that->size(); + else if (from >= that->size()) + from = that->size() - 1; + + QString exactPattern = QLatin1String("\\A(?:") + re.pattern() + QLatin1String(")\\z"); + QRegularExpression exactRe(exactPattern, re.patternOptions()); + + for (int i = from; i >= 0; --i) { + QRegularExpressionMatch m = exactRe.match(that->at(i)); + if (m.hasMatch()) + return i; + } + return -1; +} +#endif // QT_NO_REGEXP +#endif // QT_BOOTSTRAPPED + /*! \fn int QStringList::indexOf(const QString &value, int from = 0) const |