summaryrefslogtreecommitdiffstats
path: root/src/corelib/tools/qstringlist.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/corelib/tools/qstringlist.cpp')
-rw-r--r--src/corelib/tools/qstringlist.cpp117
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