#include <qstringlist.h>
#include <qset.h>
+#include <qregularexpression.h>
QT_BEGIN_NAMESPACE
}
#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)
}
#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
}
#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
class QRegExp;
+class QRegularExpression;
typedef QListIterator<QString> QStringListIterator;
typedef QMutableListIterator<QString> QMutableStringListIterator;
inline int indexOf(QRegExp &rx, int from = 0) const;
inline int lastIndexOf(QRegExp &rx, int from = -1) const;
#endif
+
+#ifndef QT_BOOTSTRAPPED
+#ifndef QT_NO_REGEXP
+ inline QStringList filter(const QRegularExpression &re) const;
+ inline QStringList &replaceInStrings(const QRegularExpression &re, const QString &after);
+ inline int indexOf(const QRegularExpression &re, int from = 0) const;
+ inline int lastIndexOf(const QRegularExpression &re, int from = -1) const;
+#endif // QT_NO_REGEXP
+#endif // QT_BOOTSTRAPPED
+
#if !defined(Q_NO_USING_KEYWORD)
using QList<QString>::indexOf;
using QList<QString>::lastIndexOf;
int Q_CORE_EXPORT QStringList_indexOf(const QStringList *that, QRegExp &rx, int from);
int Q_CORE_EXPORT QStringList_lastIndexOf(const QStringList *that, QRegExp &rx, int from);
#endif
+
+#ifndef QT_BOOTSTRAPPED
+#ifndef QT_NO_REGEXP
+ void Q_CORE_EXPORT QStringList_replaceInStrings(QStringList *that, const QRegularExpression &rx, const QString &after);
+ QStringList Q_CORE_EXPORT QStringList_filter(const QStringList *that, const QRegularExpression &re);
+ int Q_CORE_EXPORT QStringList_indexOf(const QStringList *that, const QRegularExpression &re, int from);
+ int Q_CORE_EXPORT QStringList_lastIndexOf(const QStringList *that, const QRegularExpression &re, int from);
+#endif // QT_NO_REGEXP
+#endif // QT_BOOTSTRAPPED
}
inline void QStringList::sort()
}
#endif
+#ifndef QT_BOOTSTRAPPED
+#ifndef QT_NO_REGEXP
+inline QStringList &QStringList::replaceInStrings(const QRegularExpression &rx, const QString &after)
+{
+ QtPrivate::QStringList_replaceInStrings(this, rx, after);
+ return *this;
+}
+
+inline QStringList QStringList::filter(const QRegularExpression &rx) const
+{
+ return QtPrivate::QStringList_filter(this, rx);
+}
+
+inline int QStringList::indexOf(const QRegularExpression &rx, int from) const
+{
+ return QtPrivate::QStringList_indexOf(this, rx, from);
+}
+
+inline int QStringList::lastIndexOf(const QRegularExpression &rx, int from) const
+{
+ return QtPrivate::QStringList_lastIndexOf(this, rx, from);
+}
+#endif // QT_NO_REGEXP
+#endif // QT_BOOTSTRAPPED
#ifndef QT_NO_DATASTREAM
inline QDataStream &operator>>(QDataStream &in, QStringList &list)
#include <QtTest/QtTest>
#include <qregexp.h>
+#include <qregularexpression.h>
#include <qstringlist.h>
class tst_QStringList : public QObject
{
QStringList list;
list << "harald" << "trond" << "vohi" << "harald";
+ {
+ QRegExp re(".*o.*");
- QRegExp re(".*o.*");
+ QCOMPARE(list.indexOf(re), 1);
+ QCOMPARE(list.indexOf(re, 2), 2);
+ QCOMPARE(list.indexOf(re, 3), -1);
- QCOMPARE(list.indexOf(re), 1);
- QCOMPARE(list.indexOf(re, 2), 2);
- QCOMPARE(list.indexOf(re, 3), -1);
+ QCOMPARE(list.indexOf(QRegExp(".*x.*")), -1);
+ QCOMPARE(list.indexOf(re, -1), -1);
+ QCOMPARE(list.indexOf(re, -3), 1);
+ QCOMPARE(list.indexOf(re, -9999), 1);
+ QCOMPARE(list.indexOf(re, 9999), -1);
- QCOMPARE(list.indexOf(QRegExp(".*x.*")), -1);
- QCOMPARE(list.indexOf(re, -1), -1);
- QCOMPARE(list.indexOf(re, -3), 1);
- QCOMPARE(list.indexOf(re, -9999), 1);
- QCOMPARE(list.indexOf(re, 9999), -1);
+ QCOMPARE(list.indexOf(QRegExp("[aeiou]")), -1);
+ }
+
+ {
+ QRegularExpression re(".*o.*");
+
+ QCOMPARE(list.indexOf(re), 1);
+ QCOMPARE(list.indexOf(re, 2), 2);
+ QCOMPARE(list.indexOf(re, 3), -1);
+
+ QCOMPARE(list.indexOf(QRegularExpression(".*x.*")), -1);
+ QCOMPARE(list.indexOf(re, -1), -1);
+ QCOMPARE(list.indexOf(re, -3), 1);
+ QCOMPARE(list.indexOf(re, -9999), 1);
+ QCOMPARE(list.indexOf(re, 9999), -1);
+
+ QCOMPARE(list.indexOf(QRegularExpression("[aeiou]")), -1);
+ }
}
void tst_QStringList::lastIndexOf_regExp()
QStringList list;
list << "harald" << "trond" << "vohi" << "harald";
- QRegExp re(".*o.*");
+ {
+ QRegExp re(".*o.*");
+
+ QCOMPARE(list.lastIndexOf(re), 2);
+ QCOMPARE(list.lastIndexOf(re, 2), 2);
+ QCOMPARE(list.lastIndexOf(re, 1), 1);
+
+ QCOMPARE(list.lastIndexOf(QRegExp(".*x.*")), -1);
+ QCOMPARE(list.lastIndexOf(re, -1), 2);
+ QCOMPARE(list.lastIndexOf(re, -3), 1);
+ QCOMPARE(list.lastIndexOf(re, -9999), -1);
+ QCOMPARE(list.lastIndexOf(re, 9999), 2);
+
+ QCOMPARE(list.lastIndexOf(QRegExp("[aeiou]")), -1);
+ }
+
+ {
+ QRegularExpression re(".*o.*");
+
+ QCOMPARE(list.lastIndexOf(re), 2);
+ QCOMPARE(list.lastIndexOf(re, 2), 2);
+ QCOMPARE(list.lastIndexOf(re, 1), 1);
+
+ QCOMPARE(list.lastIndexOf(QRegularExpression(".*x.*")), -1);
+ QCOMPARE(list.lastIndexOf(re, -1), 2);
+ QCOMPARE(list.lastIndexOf(re, -3), 1);
+ QCOMPARE(list.lastIndexOf(re, -9999), -1);
+ QCOMPARE(list.lastIndexOf(re, 9999), 2);
+
+ QCOMPARE(list.lastIndexOf(QRegularExpression("[aeiou]")), -1);
+ }
- QCOMPARE(list.lastIndexOf(re), 2);
- QCOMPARE(list.lastIndexOf(re, 2), 2);
- QCOMPARE(list.lastIndexOf(re, 1), 1);
- QCOMPARE(list.lastIndexOf(QRegExp(".*x.*")), -1);
- QCOMPARE(list.lastIndexOf(re, -1), 2);
- QCOMPARE(list.lastIndexOf(re, -3), 1);
- QCOMPARE(list.lastIndexOf(re, -9999), -1);
- QCOMPARE(list.lastIndexOf(re, 9999), 2);
}
void tst_QStringList::indexOf()
list3 = list3.filter( QRegExp("[i]ll") );
list4 << "Bill Gates" << "Bill Clinton";
QCOMPARE( list3, list4 );
+
+ QStringList list5, list6;
+ list5 << "Bill Gates" << "Joe Blow" << "Bill Clinton";
+ list5 = list5.filter( QRegularExpression("[i]ll") );
+ list6 << "Bill Gates" << "Bill Clinton";
+ QCOMPARE( list5, list6 );
}
void tst_QStringList::replaceInStrings()
list6 << "Bill Clinton" << "Bill Gates";
list5.replaceInStrings( QRegExp("^(.*), (.*)$"), "\\2 \\1" );
QCOMPARE( list5, list6 );
+
+ QStringList list7, list8;
+ list7 << "alpha" << "beta" << "gamma" << "epsilon";
+ list7.replaceInStrings( QRegularExpression("^a"), "o" );
+ list8 << "olpha" << "beta" << "gamma" << "epsilon";
+ QCOMPARE( list7, list8 );
+
+ QStringList list9, list10;
+ list9 << "Bill Clinton" << "Gates, Bill";
+ list10 << "Bill Clinton" << "Bill Gates";
+ list9.replaceInStrings( QRegularExpression("^(.*), (.*)$"), "\\2 \\1" );
+ QCOMPARE( list9, list10 );
}
void tst_QStringList::contains()