summaryrefslogtreecommitdiffstats
path: root/src/corelib/tools/qregularexpression.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/corelib/tools/qregularexpression.cpp')
-rw-r--r--src/corelib/tools/qregularexpression.cpp238
1 files changed, 117 insertions, 121 deletions
diff --git a/src/corelib/tools/qregularexpression.cpp b/src/corelib/tools/qregularexpression.cpp
index af2e46dd00..17caaabc97 100644
--- a/src/corelib/tools/qregularexpression.cpp
+++ b/src/corelib/tools/qregularexpression.cpp
@@ -516,10 +516,10 @@ QT_BEGIN_NAMESPACE
\section2 Wildcard matching
- There is no equivalent of wildcard matching in QRegularExpression.
- Nevertheless, rewriting a regular expression in wildcard syntax to a
- Perl-compatible regular expression is a very easy task, given the fact
- that wildcard syntax supported by QRegExp is very simple.
+ There is no direct way to do wildcard matching in QRegularExpression.
+ However, the wildcardToRegularExpression method is provided to translate
+ glob patterns into a Perl-compatible regular expression that can be used
+ for that purpose.
\section2 Other pattern syntaxes
@@ -784,82 +784,6 @@ QT_BEGIN_NAMESPACE
Qt 5.4.
*/
-namespace QtPrivate {
-/*!
- internal
-*/
-QString wildcardToRegularExpression(const QString &wildcardString)
-{
- const int wclen = wildcardString.length();
- QString rx;
- int i = 0;
- bool hasNegativeBracket = false;
- const QChar *wc = wildcardString.unicode();
-
- while (i < wclen) {
- const QChar c = wc[i++];
- switch (c.unicode()) {
- case '*':
- rx += QLatin1String(".*");
- break;
- case '?':
- rx += QLatin1Char('.');
- break;
- case '$':
- case '(':
- case ')':
- case '+':
- case '.':
- case '^':
- case '{':
- case '|':
- case '}':
- rx += QLatin1Char('\\');
- rx += c;
- break;
- case '[':
- // Support for the [!abc] or [!a-c] syntax
- // Implements a negative look-behind for one char.
- if (wc[i] == QLatin1Char(']')) {
- rx += c;
- rx += wc[i++];
- } else if (wc[i] == QLatin1Char('!')) {
- rx += QLatin1String(".(?<");
- rx += wc[i++];
- rx += c;
- hasNegativeBracket = true;
- } else {
- rx += c;
- }
-
- if (i < wclen) {
- if (rx[i] == QLatin1Char(']'))
- rx += wc[i++];
- while (i < wclen && wc[i] != QLatin1Char(']')) {
- if (wc[i] == QLatin1Char('\\'))
- rx += QLatin1Char('\\');
- rx += wc[i++];
- }
- }
- break;
- case ']':
- rx += c;
- // Closes the negative look-behind expression.
- if (hasNegativeBracket) {
- rx += QLatin1Char(')');
- hasNegativeBracket = false;
- }
- break;
- default:
- rx += c;
- break;
- }
- }
-
- return rx;
-}
-}
-
/*!
\internal
*/
@@ -1583,47 +1507,6 @@ void QRegularExpression::setPattern(const QString &pattern)
}
/*!
- \since 5.12
-
- Sets the pattern string of the regular expression to \a wildcard pattern.
- The pattern options are left unchanged.
-
- \warning Unlike QRegExp, this implementation follows closely the definition
- of wildcard for glob patterns:
- \table
- \row \li \b{c}
- \li Any character represents itself apart from those mentioned
- below. Thus \b{c} matches the character \e c.
- \row \li \b{?}
- \li Matches any single character. It is the same as
- \b{.} in full regexps.
- \row \li \b{*}
- \li Matches zero or more of any characters. It is the
- same as \b{.*} in full regexps.
- \row \li \b{[abc]}
- \li Matches one character given in the bracket.
- \row \li \b{[a-c]}
- \li Matches one character from the range given in the bracket.
- \row \li \b{[!abc]}
- \li Matches one character that is not given in the bracket.
- \row \li \b{[!a-c]}
- \li matches one character that is not from the range given in the
- bracket.
- \endtable
-
- \note This function generates a regular expression that will act following
- the wildcard pattern given. However the content of the regular expression
- will not be the same as the one set.
-
- \sa pattern(), setPattern()
-*/
-void QRegularExpression::setWildcardPattern(const QString &pattern)
-{
- setPattern(QtPrivate::wildcardToRegularExpression(pattern));
-}
-
-
-/*!
Returns the pattern options for the regular expression.
\sa setPatternOptions(), pattern()
@@ -1988,6 +1871,119 @@ QString QRegularExpression::escape(const QString &str)
}
/*!
+ \since 5.12
+
+ Returns a regular expression representation of the given glob \a pattern.
+
+ \snippet code/src_corelib_tools_qregularexpression.cpp 31
+
+ \warning Unlike QRegExp, this implementation follows closely the definition
+ of wildcard for glob patterns:
+ \table
+ \row \li \b{c}
+ \li Any character represents itself apart from those mentioned
+ below. Thus \b{c} matches the character \e c.
+ \row \li \b{?}
+ \li Matches any single character. It is the same as
+ \b{.} in full regexps.
+ \row \li \b{*}
+ \li Matches zero or more of any characters. It is the
+ same as \b{.*} in full regexps.
+ \row \li \b{[abc]}
+ \li Matches one character given in the bracket.
+ \row \li \b{[a-c]}
+ \li Matches one character from the range given in the bracket.
+ \row \li \b{[!abc]}
+ \li Matches one character that is not given in the bracket. It is the
+ same as \b{[^abc]} in full regexp.
+ \row \li \b{[!a-c]}
+ \li Matches one character that is not from the range given in the
+ bracket. It is the same as \b{[^a-c]} in full regexp.
+ \endtable
+
+ \note The backslash (\\) character is \e not an escape char in this context.
+ In order to match one of the special characters, place it in square brackets
+ (for example, "[?]").
+
+ More information about the implementation can be found in:
+ \list
+ \li \l {https://en.wikipedia.org/wiki/Glob_(programming)} {The Wikipedia Glob article}
+ \li \c man 7 glob
+ \endlist
+
+ \sa escape()
+*/
+QString QRegularExpression::wildcardToRegularExpression(const QString &pattern)
+{
+ const int wclen = pattern.length();
+ QString rx;
+ int i = 0;
+ bool hasNegativeBracket = false;
+ const QChar *wc = pattern.unicode();
+
+ while (i < wclen) {
+ const QChar c = wc[i++];
+ switch (c.unicode()) {
+ case '*':
+ rx += QLatin1String(".*");
+ break;
+ case '?':
+ rx += QLatin1Char('.');
+ break;
+ case '$':
+ case '(':
+ case ')':
+ case '+':
+ case '.':
+ case '^':
+ case '{':
+ case '|':
+ case '}':
+ rx += QLatin1Char('\\');
+ rx += c;
+ break;
+ case '[':
+ // Support for the [!abc] or [!a-c] syntax
+ // Implements a negative look-behind for one char.
+ if (i < wclen) {
+ if (wc[i] == QLatin1Char(']')) {
+ rx += c;
+ rx += wc[i++];
+ } else if (wc[i] == QLatin1Char('!')) {
+ rx += QLatin1String(".(?<");
+ rx += wc[i++];
+ rx += c;
+ hasNegativeBracket = true;
+ } else {
+ rx += c;
+ }
+ while (i < wclen && wc[i] != QLatin1Char(']')) {
+ if (wc[i] == QLatin1Char('\\'))
+ rx += QLatin1Char('\\');
+ rx += wc[i++];
+ }
+ } else {
+ rx += c;
+ }
+ break;
+ case ']':
+ rx += c;
+ // Closes the negative look-behind expression.
+ if (hasNegativeBracket) {
+ rx += QLatin1Char(')');
+ hasNegativeBracket = false;
+ }
+ break;
+ default:
+ rx += c;
+ break;
+ }
+ }
+
+ return rx;
+}
+
+/*!
\since 5.1
Constructs a valid, empty QRegularExpressionMatch object. The regular