QRegularExpression Class
Die Klasse QRegularExpression ermöglicht den Mustervergleich mit regulären Ausdrücken. Mehr...
Kopfzeile: | #include <QRegularExpression> |
CMake: | find_package(Qt6 REQUIRED COMPONENTS Core) target_link_libraries(mytarget PRIVATE Qt6::Core) |
qmake: | QT += core |
- Liste aller Mitglieder, einschließlich vererbter Mitglieder
- Veraltete Mitglieder
- QRegularExpression ist Teil von Implicitly Shared Classes und Classes for String Data.
Diese Klasse ist gleichwertig-vergleichbar.
Hinweis: Alle Funktionen in dieser Klasse sind reentrant.
Öffentliche Typen
enum | MatchOption { NoMatchOption, AnchoredMatchOption, AnchorAtOffsetMatchOption, DontCheckSubjectStringMatchOption } |
flags | MatchOptions |
enum | MatchType { NormalMatch, PartialPreferCompleteMatch, PartialPreferFirstMatch, NoMatch } |
enum | PatternOption { NoPatternOption, CaseInsensitiveOption, DotMatchesEverythingOption, MultilineOption, ExtendedPatternSyntaxOption, …, UseUnicodePropertiesOption } |
flags | PatternOptions |
(since 6.0) enum | WildcardConversionOption { DefaultWildcardConversion, UnanchoredWildcardConversion, NonPathWildcardConversion } |
flags | WildcardConversionOptions |
Öffentliche Funktionen
QRegularExpression() | |
QRegularExpression(const QString &pattern, QRegularExpression::PatternOptions options = NoPatternOption) | |
QRegularExpression(const QRegularExpression &re) | |
(since 6.1) | QRegularExpression(QRegularExpression &&re) |
~QRegularExpression() | |
int | captureCount() const |
QString | errorString() const |
QRegularExpressionMatchIterator | globalMatch(const QString &subject, qsizetype offset = 0, QRegularExpression::MatchType matchType = NormalMatch, QRegularExpression::MatchOptions matchOptions = NoMatchOption) const |
(since 6.5) QRegularExpressionMatchIterator | globalMatchView(QStringView subjectView, qsizetype offset = 0, QRegularExpression::MatchType matchType = NormalMatch, QRegularExpression::MatchOptions matchOptions = NoMatchOption) const |
bool | isValid() const |
QRegularExpressionMatch | match(const QString &subject, qsizetype offset = 0, QRegularExpression::MatchType matchType = NormalMatch, QRegularExpression::MatchOptions matchOptions = NoMatchOption) const |
(since 6.5) QRegularExpressionMatch | matchView(QStringView subjectView, qsizetype offset = 0, QRegularExpression::MatchType matchType = NormalMatch, QRegularExpression::MatchOptions matchOptions = NoMatchOption) const |
QStringList | namedCaptureGroups() const |
void | optimize() const |
QString | pattern() const |
qsizetype | patternErrorOffset() const |
QRegularExpression::PatternOptions | patternOptions() const |
void | setPattern(const QString &pattern) |
void | setPatternOptions(QRegularExpression::PatternOptions options) |
void | swap(QRegularExpression &other) |
QRegularExpression & | operator=(QRegularExpression &&re) |
QRegularExpression & | operator=(const QRegularExpression &re) |
Statische öffentliche Mitglieder
QString | anchoredPattern(QStringView expression) |
QString | anchoredPattern(const QString &expression) |
QString | escape(QStringView str) |
QString | escape(const QString &str) |
(since 6.0) QRegularExpression | fromWildcard(QStringView pattern, Qt::CaseSensitivity cs = Qt::CaseInsensitive, QRegularExpression::WildcardConversionOptions options = DefaultWildcardConversion) |
QString | wildcardToRegularExpression(QStringView pattern, QRegularExpression::WildcardConversionOptions options = DefaultWildcardConversion) |
QString | wildcardToRegularExpression(const QString &pattern, QRegularExpression::WildcardConversionOptions options = DefaultWildcardConversion) |
Verwandte Nicht-Mitglieder
size_t | qHash(const QRegularExpression &key, size_t seed = 0) |
bool | operator!=(const QRegularExpression &lhs, const QRegularExpression &rhs) |
QDataStream & | operator<<(QDataStream &out, const QRegularExpression &re) |
QDebug | operator<<(QDebug debug, QRegularExpression::PatternOptions patternOptions) |
QDebug | operator<<(QDebug debug, const QRegularExpression &re) |
bool | operator==(const QRegularExpression &lhs, const QRegularExpression &rhs) |
QDataStream & | operator>>(QDataStream &in, QRegularExpression &re) |
Detaillierte Beschreibung
Reguläre Ausdrücke, oder regexps, sind ein sehr mächtiges Werkzeug, um Zeichenketten und Texte zu verarbeiten. Dies ist in vielen Kontexten nützlich, z.B.,
Gültigkeitsprüfung | Ein regexp kann prüfen, ob eine Teilzeichenkette bestimmte Kriterien erfüllt, z. B. eine ganze Zahl ist oder kein Leerzeichen enthält. |
Durchsuchen | Ein regexp bietet einen leistungsfähigeren Mustervergleich als einen einfachen Teilstringvergleich, z. B. einen Vergleich mit einem der Wörter mail, letter oder correspondence, aber keinem der Wörter email, mailman, mailer, letterbox usw. |
Suchen und Ersetzen | Eine Regexp kann alle Vorkommen einer Teilzeichenkette durch eine andere Teilzeichenkette ersetzen, z. B. alle Vorkommen von & durch & ersetzen, außer wenn auf & bereits ein amp; folgt. |
Aufteilung von Zeichenketten | Ein regexp kann verwendet werden, um festzustellen, wo eine Zeichenkette aufgespalten werden soll, z. B. beim Aufspalten tabulatorgetrennter Zeichenketten. |
Dieses Dokument ist keineswegs eine vollständige Referenz zum Musterabgleich mit regulären Ausdrücken, und die folgenden Teile setzen voraus, dass der Leser einige Grundkenntnisse über Perl-ähnliche reguläre Ausdrücke und deren Mustersyntax hat.
Gute Referenzen über reguläre Ausdrücke sind unter anderem:
- Mastering Regular Expressions (Third Edition) von Jeffrey E. F. Friedl, ISBN 0-596-52812-4;
- die Manpage pcrepattern(3), die die von PCRE (der Referenzimplementierung von Perl-kompatiblen regulären Ausdrücken) unterstützte Mustersyntax beschreibt;
- die Dokumentation zu regulären Ausdrücken in Perl und das Tutorial zu regulären Ausdrücken in Perl.
Einführung
QRegularExpression implementiert Perl-kompatible reguläre Ausdrücke. Es unterstützt vollständig Unicode. Einen Überblick über die von QRegularExpression unterstützte Syntax regulärer Ausdrücke finden Sie in der bereits erwähnten Manpage pcrepattern(3). Ein regulärer Ausdruck besteht aus zwei Dingen: einer Musterzeichenkette und einer Reihe von Musteroptionen, die die Bedeutung der Musterzeichenkette ändern.
Sie können die Musterzeichenfolge festlegen, indem Sie dem Konstruktor QRegularExpression eine Zeichenfolge übergeben:
QRegularExpression re("a pattern");
Dadurch wird die Musterzeichenkette auf a pattern
gesetzt. Sie können auch die Funktion setPattern() verwenden, um ein Muster für ein vorhandenes QRegularExpression-Objekt festzulegen:
QRegularExpression re; re.setPattern("another pattern");
Beachten Sie, dass Sie aufgrund der Regeln für C++-Literalzeichenfolgen alle Backslashes innerhalb der Musterzeichenfolge mit einem weiteren Backslash abschließen müssen:
// matches two digits followed by a space and a word QRegularExpression re("\\d\\d \\w+"); // matches a backslash QRegularExpression re2("\\\\");
In diesem Fall brauchen Sie keine Backslashes im Muster zu verwenden, da alle Zeichen zwischen R"(...)"
als rohe Zeichen betrachtet werden. Wie Sie im folgenden Beispiel sehen können, vereinfacht dies das Schreiben von Mustern:
// matches two digits followed by a space and a word QRegularExpression re(R"(\d\d \w+)");
Die Funktion pattern() gibt das Muster zurück, das derzeit für ein QRegularExpression-Objekt festgelegt ist:
QRegularExpression re("a third pattern"); QString pattern = re.pattern(); // pattern == "a third pattern"
Muster-Optionen
Die Bedeutung der Musterzeichenkette kann durch Setzen einer oder mehrerer Musteroptionen geändert werden. Es ist zum Beispiel möglich, ein Muster so einzustellen, dass die Groß- und Kleinschreibung nicht beachtet wird, indem die Option QRegularExpression::CaseInsensitiveOption gesetzt wird.
Sie können die Optionen setzen, indem Sie sie an den Konstruktor QRegularExpression übergeben, wie in:
// matches "Qt rocks", but also "QT rocks", "QT ROCKS", "qT rOcKs", etc. QRegularExpression re("Qt rocks", QRegularExpression::CaseInsensitiveOption);
Alternativ können Sie die Funktion setPatternOptions() auf ein bestehendes QRegularExpressionObject anwenden:
QRegularExpression re("^\\d+$"); re.setPatternOptions(QRegularExpression::MultilineOption); // re matches any line in the subject string that contains only digits (but at least one)
Es ist möglich, mit der Funktion patternOptions() die aktuell eingestellten Musteroptionen eines QRegularExpression-Objekts abzurufen:
QRegularExpression re = QRegularExpression("^two.*words$", QRegularExpression::MultilineOption | QRegularExpression::DotMatchesEverythingOption); QRegularExpression::PatternOptions options = re.patternOptions(); // options == QRegularExpression::MultilineOption | QRegularExpression::DotMatchesEverythingOption
Weitere Informationen zu den einzelnen Musteroptionen finden Sie in der Dokumentation QRegularExpression::PatternOption enum.
Übereinstimmungstyp und Übereinstimmungsoptionen
Die letzten beiden Argumente der Funktionen match() und globalMatch() legen den Übereinstimmungstyp und die Übereinstimmungsoptionen fest. Der Abgleichstyp ist ein Wert der Aufzählung QRegularExpression::MatchType; der "traditionelle" Abgleichsalgorithmus wird durch die Verwendung des Abgleichstyps NormalMatch (die Vorgabe) gewählt. Es ist auch möglich, einen teilweisen Abgleich des regulären Ausdrucks mit einer Betreff-Zeichenkette zu aktivieren: siehe den Abschnitt partial matching für weitere Einzelheiten.
Die Übereinstimmungsoptionen sind ein Satz von einem oder mehreren QRegularExpression::MatchOption Werten. Sie ändern die Art und Weise, wie eine bestimmte Übereinstimmung eines regulären Ausdrucks mit einer Betreff-Zeichenkette durchgeführt wird. Weitere Einzelheiten entnehmen Sie bitte der Dokumentation QRegularExpression::MatchOption enum.
Normaler Abgleich
Um einen Abgleich durchzuführen, können Sie einfach die Funktion match() aufrufen und eine Zeichenkette übergeben, die abgeglichen werden soll. Wir bezeichnen diese Zeichenkette als Betreffzeichenkette. Das Ergebnis der Funktion match() ist ein QRegularExpressionMatch Objekt, mit dem die Ergebnisse des Abgleichs überprüft werden können. Zum Beispiel:
// match two digits followed by a space and a word QRegularExpression re("\\d\\d \\w+"); QRegularExpressionMatch match = re.match("abc123 def"); bool hasMatch = match.hasMatch(); // true
Wenn eine Übereinstimmung erfolgreich ist, kann die (implizite) Erfassungsgruppennummer 0 verwendet werden, um die Teilzeichenkette abzurufen, auf die das gesamte Muster passt (siehe auch den Abschnitt über extracting captured substrings):
QRegularExpression re("\\d\\d \\w+"); QRegularExpressionMatch match = re.match("abc123 def"); if (match.hasMatch()) { QString matched = match.captured(0); // matched == "23 def" // ... }
Es ist auch möglich, eine Übereinstimmung an einem beliebigen Offset innerhalb der Betreffzeichenkette zu beginnen, indem der Offset als Argument der Funktion match() übergeben wird. Im folgenden Beispiel wird "12 abc"
nicht gefunden, da die Übereinstimmung bei Offset 1 beginnt:
QRegularExpression re("\\d\\d \\w+"); QRegularExpressionMatch match = re.match("12 abc 45 def", 1); if (match.hasMatch()) { QString matched = match.captured(0); // matched == "45 def" // ... }
Extrahieren erfasster Teilstrings
Das Objekt QRegularExpressionMatch enthält auch Informationen über die Teilzeichenketten, die von den Erfassungsgruppen im Musterstring erfasst wurden. Die Funktion captured() gibt die Zeichenkette zurück, die von der n-ten Erfassungsgruppe erfasst wurde:
QRegularExpression re("^(\\d\\d)/(\\d\\d)/(\\d\\d\\d\\d)$"); QRegularExpressionMatch match = re.match("08/12/1985"); if (match.hasMatch()) { QString day = match.captured(1); // day == "08" QString month = match.captured(2); // month == "12" QString year = match.captured(3); // year == "1985" // ... }
Die Erfassungsgruppen im Muster sind von 1 an nummeriert, und die implizite Erfassungsgruppe 0 wird verwendet, um die Teilzeichenkette zu erfassen, die mit dem gesamten Muster übereinstimmt.
Mit den Funktionen capturedStart() und capturedEnd() können auch der Anfangs- und der End-Offset (innerhalb der betreffenden Zeichenkette) jeder erfassten Teilzeichenkette abgerufen werden:
QRegularExpression re("abc(\\d+)def"); QRegularExpressionMatch match = re.match("XYZabc123defXYZ"); if (match.hasMatch()) { int startOffset = match.capturedStart(1); // startOffset == 6 int endOffset = match.capturedEnd(1); // endOffset == 9 // ... }
Alle diese Funktionen haben eine Überladung mit QString als Parameter, um benannte erfasste Teilstrings zu extrahieren. Zum Beispiel:
QRegularExpression re("^(?<date>\\d\\d)/(?<month>\\d\\d)/(?<year>\\d\\d\\d\\d)$"); QRegularExpressionMatch match = re.match("08/12/1985"); if (match.hasMatch()) { QString date = match.captured("date"); // date == "08" QString month = match.captured("month"); // month == "12" QString year = match.captured("year"); // year == 1985 }
Globaler Abgleich
Derglobale Abgleich ist nützlich, um alle Vorkommen eines bestimmten regulären Ausdrucks in einer bestimmten Zeichenkette zu finden. Angenommen, wir wollen alle Wörter aus einer gegebenen Zeichenkette extrahieren, wobei ein Wort eine Teilzeichenkette ist, die dem Muster \w+
entspricht.
QRegularExpression::globalMatch gibt ein QRegularExpressionMatchIterator zurück, das ein Java-ähnlicher Vorwärts-Iterator ist, der verwendet werden kann, um über die Ergebnisse zu iterieren. Zum Beispiel:
QRegularExpression re("(\\w+)"); QRegularExpressionMatchIterator i = re.globalMatch("the quick fox");
Da es sich um einen Java-ähnlichen Iterator handelt, zeigt die QRegularExpressionMatchIterator unmittelbar vor dem ersten Ergebnis. Jedes Ergebnis wird als QRegularExpressionMatch Objekt zurückgegeben. Die Funktion hasNext() gibt true zurück, wenn es mindestens ein weiteres Ergebnis gibt, und next() gibt das nächste Ergebnis zurück und setzt den Iterator fort. Fortsetzung des vorherigen Beispiels:
QStringList words; while (i.hasNext()) { QRegularExpressionMatch match = i.next(); QString word = match.captured(1); words << word; } // words contains "the", "quick", "fox"
Sie können auch peekNext() verwenden, um das nächste Ergebnis zu erhalten, ohne den Iterator weiterzuschalten.
Es ist auch möglich, einfach das Ergebnis von QRegularExpression::globalMatch in einer bereichsbasierten for-Schleife zu verwenden, zum Beispiel so:
// using a raw string literal, R"(raw_characters)", to be able to use "\w" // without having to escape the backslash as "\\w" QRegularExpression re(R"(\w+)"); QString subject("the quick fox"); for (const QRegularExpressionMatch &match : re.globalMatch(subject)) { // ... }
Es ist möglich, einen Startoffset und eine oder mehrere Übereinstimmungsoptionen an die Funktion globalMatch() zu übergeben, genau wie beim normalen Abgleich mit match().
Teilweiser Abgleich
Eine Teilübereinstimmung liegt vor, wenn das Ende der betreffenden Zeichenkette erreicht ist, aber noch weitere Zeichen benötigt werden, um die Übereinstimmung zu vervollständigen. Beachten Sie, dass eine teilweise Übereinstimmung in der Regel viel ineffizienter ist als eine normale Übereinstimmung, da viele Optimierungen des Übereinstimmungsalgorithmus nicht genutzt werden können.
Eine Teilübereinstimmung muss explizit angefordert werden, indem beim Aufruf von QRegularExpression::match oder QRegularExpression::globalMatch ein Übereinstimmungstyp PartialPreferCompleteMatch oder PartialPreferFirstMatch angegeben wird. Wird eine Teilübereinstimmung gefunden, gibt der Aufruf der Funktion hasMatch() auf dem von match() zurückgegebenen Objekt QRegularExpressionMatch den Wert false
zurück, während hasPartialMatch() den Wert true
liefert.
Wenn eine teilweise Übereinstimmung gefunden wird, werden keine erfassten Teilzeichenfolgen zurückgegeben, und die (implizite) Erfassungsgruppe 0, die der gesamten Übereinstimmung entspricht, erfasst die teilweise übereinstimmende Teilzeichenfolge der betreffenden Zeichenkette.
Beachten Sie, dass die Frage nach einer teilweisen Übereinstimmung immer noch zu einer vollständigen Übereinstimmung führen kann, wenn eine gefunden wird; in diesem Fall gibt hasMatch() true
und hasPartialMatch() false
zurück. Es kommt nie vor, dass QRegularExpressionMatch sowohl eine teilweise als auch eine vollständige Übereinstimmung meldet.
Teilweise Übereinstimmung ist hauptsächlich in zwei Szenarien nützlich: Validierung von Benutzereingaben in Echtzeit und inkrementelle/mehrteilige Übereinstimmung.
Validierung von Benutzereingaben
Angenommen, wir möchten, dass der Benutzer ein Datum in einem bestimmten Format eingibt, zum Beispiel "MMM tt, jjjj". Wir können die Gültigkeit der Eingabe mit einem Muster wie dem folgenden überprüfen:
^(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) \d\d?, \d\d\d\d$
(Dieses Muster fängt keine ungültigen Tage ab, aber wir behalten es für die Zwecke des Beispiels bei).
Wir möchten die Eingabe mit diesem regulären Ausdruck überprüfen , während der Benutzer sie eingibt, so dass wir einen Fehler in der Eingabe melden können, sobald er begangen wurde (z. B. wenn der Benutzer eine falsche Taste gedrückt hat). Dazu müssen wir drei Fälle unterscheiden:
- Die Eingabe kann unmöglich mit dem regulären Ausdruck übereinstimmen;
- die Eingabe stimmt mit dem regulären Ausdruck überein;
- die Eingabe entspricht dem regulären Ausdruck im Moment nicht, wird es aber, wenn weitere Zeichen hinzugefügt werden.
Beachten Sie, dass diese drei Fälle genau die möglichen Zustände eines QValidator darstellen (siehe QValidator::State enum).
Insbesondere im letzten Fall möchten wir, dass die Engine für reguläre Ausdrücke eine Teilübereinstimmung meldet: Wir haben das Muster erfolgreich mit der Betreffzeichenkette abgeglichen, aber der Abgleich kann nicht fortgesetzt werden, weil das Ende des Betreffs erreicht wurde. Beachten Sie jedoch, dass der Abgleichsalgorithmus fortfahren und alle Möglichkeiten ausprobieren sollte, und falls eine vollständige (nicht partielle) Übereinstimmung gefunden wird, sollte diese gemeldet und die Eingabezeichenfolge als vollständig gültig akzeptiert werden.
Dieses Verhalten wird durch den Übereinstimmungstyp PartialPreferCompleteMatch implementiert. Zum Beispiel:
QString pattern("^(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) \\d\\d?, \\d\\d\\d\\d$"); QRegularExpression re(pattern); QString input("Jan 21,"); QRegularExpressionMatch match = re.match(input, 0, QRegularExpression::PartialPreferCompleteMatch); bool hasMatch = match.hasMatch(); // false bool hasPartialMatch = match.hasPartialMatch(); // true
Wenn ein Abgleich desselben regulären Ausdrucks mit der Betreffzeichenkette zu einer vollständigen Übereinstimmung führt, wird dies wie üblich gemeldet:
QString input("Dec 8, 1985"); QRegularExpressionMatch match = re.match(input, 0, QRegularExpression::PartialPreferCompleteMatch); bool hasMatch = match.hasMatch(); // true bool hasPartialMatch = match.hasPartialMatch(); // false
Ein weiteres Beispiel mit einem anderen Muster, das zeigt, dass eine vollständige Übereinstimmung gegenüber einer teilweisen Übereinstimmung bevorzugt wird:
QRegularExpression re("abc\\w+X|def"); QRegularExpressionMatch match = re.match("abcdef", 0, QRegularExpression::PartialPreferCompleteMatch); bool hasMatch = match.hasMatch(); // true bool hasPartialMatch = match.hasPartialMatch(); // false QString captured = match.captured(0); // captured == "def"
In diesem Fall stimmt das Teilmuster abc\\w+X
teilweise mit der Betreffzeichenkette überein; das Teilmuster def
stimmt jedoch vollständig mit der Betreffzeichenkette überein, so dass eine vollständige Übereinstimmung gemeldet wird.
Wenn beim Abgleich mehrere Teilübereinstimmungen gefunden werden (aber keine vollständige Übereinstimmung), meldet das Objekt QRegularExpressionMatch die erste gefundene Übereinstimmung. Zum Beispiel:
QRegularExpression re("abc\\w+X|defY"); QRegularExpressionMatch match = re.match("abcdef", 0, QRegularExpression::PartialPreferCompleteMatch); bool hasMatch = match.hasMatch(); // false bool hasPartialMatch = match.hasPartialMatch(); // true QString captured = match.captured(0); // captured == "abcdef"
Inkrementeller/Mehrsegmentabgleich
Inkrementeller Abgleich ist ein weiterer Anwendungsfall des partiellen Abgleichs. Nehmen wir an, wir wollen die Vorkommen eines regulären Ausdrucks in einem großen Text finden (d.h. Teilstrings, die auf den regulären Ausdruck passen). Zu diesem Zweck möchten wir den großen Text in kleineren Stücken an die Maschinen für reguläre Ausdrücke "verfüttern". Das offensichtliche Problem ist, was passiert, wenn die Teilzeichenkette, die mit dem regulären Ausdruck übereinstimmt, sich über zwei oder mehr Abschnitte erstreckt.
In diesem Fall sollte die Engine für reguläre Ausdrücke eine Teilübereinstimmung melden, so dass wir die Übereinstimmung durch Hinzufügen neuer Daten wiederherstellen können und (schließlich) eine vollständige Übereinstimmung erhalten. Dies bedeutet, dass die Engine für reguläre Ausdrücke davon ausgehen kann, dass es noch weitere Zeichen hinter dem Ende der betreffenden Zeichenfolge gibt. Dies ist nicht wörtlich zu nehmen - die Engine wird niemals versuchen, auf ein Zeichen nach dem letzten Zeichen im Betreff zuzugreifen.
QRegularExpression implementiert dieses Verhalten, wenn der Übereinstimmungstyp PartialPreferFirstMatch verwendet wird. Dieser Übereinstimmungstyp meldet eine Teilübereinstimmung, sobald sie gefunden wird, und andere Alternativen werden nicht ausprobiert (auch wenn sie zu einer vollständigen Übereinstimmung führen könnten). Zum Beispiel:
QRegularExpression re("abc|ab"); QRegularExpressionMatch match = re.match("ab", 0, QRegularExpression::PartialPreferFirstMatch); bool hasMatch = match.hasMatch(); // false bool hasPartialMatch = match.hasPartialMatch(); // true
Dies geschieht, weil beim Abgleich mit dem ersten Zweig des Alternationsoperators eine Teilübereinstimmung gefunden wird und der Abgleich daher abgebrochen wird, ohne den zweiten Zweig zu versuchen. Ein anderes Beispiel:
QRegularExpression re("abc(def)?"); QRegularExpressionMatch match = re.match("abc", 0, QRegularExpression::PartialPreferFirstMatch); bool hasMatch = match.hasMatch(); // false bool hasPartialMatch = match.hasPartialMatch(); // true
Hier zeigt sich ein scheinbar kontraintuitives Verhalten von Quantoren: Da ?
gierig ist, versucht die Maschine zunächst, den Abgleich fortzusetzen, nachdem sie "abc"
abgeglichen hat; aber dann erreicht der Abgleich das Ende der Betreffzeichenkette, und daher wird eine teilweise Übereinstimmung gemeldet. Noch überraschender ist dies im folgenden Beispiel:
QRegularExpression re("(abc)*"); QRegularExpressionMatch match = re.match("abc", 0, QRegularExpression::PartialPreferFirstMatch); bool hasMatch = match.hasMatch(); // false bool hasPartialMatch = match.hasPartialMatch(); // true
Dieses Verhalten ist leicht zu verstehen, wenn wir uns daran erinnern, dass die Suchmaschine davon ausgeht, dass die Betreffzeichenkette nur eine Teilzeichenkette des gesamten Textes ist, in dem wir eine Übereinstimmung suchen (d. h., wie wir bereits sagten, dass die Suchmaschine davon ausgeht, dass es hinter dem Ende der Betreffzeichenkette weitere Zeichen gibt).
Da der Quantifizierer *
gierig ist, könnte es ein Fehler sein, eine vollständige Übereinstimmung zu melden, da es nach dem aktuellen Betreff "abc"
noch weitere Vorkommen von "abc"
geben kann. Der vollständige Text könnte beispielsweise "abcabcX" lauten, und daher wäre die richtige Übereinstimmung (im vollständigen Text) "abcabc"
; durch einen Abgleich nur mit dem führenden "abc"
erhalten wir stattdessen eine teilweise Übereinstimmung.
Fehlerbehandlung
Es ist möglich, dass ein QRegularExpression-Objekt aufgrund von Syntaxfehlern in der Musterzeichenfolge ungültig ist. Die Funktion isValid() gibt true zurück, wenn der reguläre Ausdruck gültig ist, andernfalls false:
QRegularExpression invalidRe("(unmatched|parenthesis"); bool isValid = invalidRe.isValid(); // false
Sie können weitere Informationen über den spezifischen Fehler erhalten, indem Sie die Funktion errorString() aufrufen; außerdem gibt die Funktion patternErrorOffset() den Offset innerhalb der Musterzeichenfolge zurück
QRegularExpression invalidRe("(unmatched|parenthesis"); if (!invalidRe.isValid()) { QString errorString = invalidRe.errorString(); // errorString == "missing )" int errorOffset = invalidRe.patternErrorOffset(); // errorOffset == 22 // ... }
Wenn eine Übereinstimmung mit einem ungültigen QRegularExpression versucht wird, dann ist das zurückgegebene QRegularExpressionMatch Objekt ebenfalls ungültig (d.h. seine isValid() Funktion gibt false zurück). Das Gleiche gilt für den Versuch einer globalen Übereinstimmung.
Nicht unterstützte Perl-kompatible reguläre Ausdrücke Merkmale
QRegularExpression unterstützt nicht alle Funktionen, die in Perl-kompatiblen regulären Ausdrücken verfügbar sind. Das bemerkenswerteste Merkmal ist die Tatsache, dass doppelte Namen für die Erfassung von Gruppen nicht unterstützt werden und dass ihre Verwendung zu undefiniertem Verhalten führen kann.
Dies kann sich in einer zukünftigen Version von Qt ändern.
Debugging von Code, der QRegularExpression verwendet
QRegularExpression verwendet intern einen Just-in-Time-Compiler (JIT), um die Ausführung des Matching-Algorithmus zu optimieren. Der JIT macht ausgiebig Gebrauch von sich selbst modifizierendem Code, was Debugging-Tools wie Valgrind zum Absturz bringen kann. Sie müssen alle Prüfungen auf selbstmodifizierenden Code aktivieren, wenn Sie Programme mit QRegularExpression debuggen wollen (z.B. Valgrinds Kommandozeilenoption --smc-check
). Der Nachteil der Aktivierung solcher Prüfungen ist, dass Ihr Programm erheblich langsamer läuft.
Um dies zu vermeiden, ist das JIT standardmäßig deaktiviert, wenn Sie Qt im Debug-Modus kompilieren. Es ist möglich, die Vorgabe zu überschreiben und die JIT-Verwendung zu aktivieren oder zu deaktivieren (sowohl im Debug- als auch im Release-Modus), indem Sie die Umgebungsvariable QT_ENABLE_REGEXP_JIT
auf einen Wert ungleich Null bzw. Null setzen.
Siehe auch QRegularExpressionMatch und QRegularExpressionMatchIterator.
Dokumentation der Mitgliedstypen
enum QRegularExpression::MatchOption
flags QRegularExpression::MatchOptions
Konstante | Wert | Beschreibung |
---|---|---|
QRegularExpression::NoMatchOption | 0x0000 | Es werden keine Übereinstimmungsoptionen gesetzt. |
QRegularExpression::AnchoredMatchOption | AnchorAtOffsetMatchOption | Verwenden Sie stattdessen AnchorAtOffsetMatchOption. |
QRegularExpression::AnchorAtOffsetMatchOption | 0x0001 | Die Übereinstimmung muss genau an dem an match() übergebenen Offset beginnen, um erfolgreich zu sein, auch wenn die Musterzeichenfolge kein Metazeichen enthält, das die Übereinstimmung an diesem Punkt verankert. Beachten Sie, dass die Übergabe dieser Option das Ende der Übereinstimmung nicht am Ende des Themas verankert; wenn Sie einen regulären Ausdruck vollständig verankern wollen, verwenden Sie anchoredPattern(). Dieser Enum-Wert wurde in Qt 6.0 eingeführt. |
QRegularExpression::DontCheckSubjectStringMatchOption | 0x0002 | Die Betreffzeichenkette wird nicht auf UTF-16-Gültigkeit geprüft, bevor eine Übereinstimmung versucht wird. Verwenden Sie diese Option mit äußerster Vorsicht, da der Versuch, eine ungültige Zeichenkette zu finden, das Programm zum Absturz bringen und/oder ein Sicherheitsproblem darstellen kann. Dieser Enum-Wert wurde in Qt 5.4 eingeführt. |
Der Typ MatchOptions ist ein Typedef für QFlags<MatchOption>. Er speichert eine OR-Kombination von MatchOption-Werten.
enum QRegularExpression::MatchType
Die Aufzählung MatchType definiert den Typ der Übereinstimmung, die mit der Betreffzeichenkette versucht werden soll.
Konstante | Wert | Beschreibung |
---|---|---|
QRegularExpression::NormalMatch | 0 | Es wird ein normaler Abgleich durchgeführt. |
QRegularExpression::PartialPreferCompleteMatch | 1 | Die Musterzeichenkette wird teilweise mit der Betreffzeichenkette abgeglichen. Wird eine Teilübereinstimmung gefunden, wird sie aufgezeichnet, und es werden wie üblich andere Übereinstimmungsalternativen ausprobiert. Wird dann eine vollständige Übereinstimmung gefunden, wird diese der teilweisen Übereinstimmung vorgezogen; in diesem Fall wird nur die vollständige Übereinstimmung gemeldet. Wird hingegen keine vollständige Übereinstimmung gefunden (sondern nur die Teilübereinstimmung), so wird die Teilübereinstimmung gemeldet. |
QRegularExpression::PartialPreferFirstMatch | 2 | Die Musterzeichenkette wird teilweise mit der Betreffzeichenkette abgeglichen. Wenn eine Teilübereinstimmung gefunden wird, wird der Abgleich beendet und die Teilübereinstimmung gemeldet. In diesem Fall werden andere Alternativen (die möglicherweise zu einer vollständigen Übereinstimmung führen) nicht ausprobiert. Außerdem wird bei dieser Art der Übereinstimmung davon ausgegangen, dass die Betreffzeichenkette nur eine Teilzeichenkette eines größeren Textes ist und dass es (in diesem Text) weitere Zeichen hinter dem Ende der Betreffzeichenkette gibt. Dies kann zu überraschenden Ergebnissen führen; siehe die Diskussion im Abschnitt partial matching für weitere Einzelheiten. |
QRegularExpression::NoMatch | 3 | Es wird kein Abgleich durchgeführt. Dieser Wert wird als Übereinstimmungstyp von einem standardmäßig konstruierten QRegularExpressionMatch oder QRegularExpressionMatchIterator zurückgegeben. Die Verwendung dieses Übereinstimmungstyps ist für den Benutzer nicht sehr nützlich, da nie eine Übereinstimmung stattfindet. Dieser enum-Wert wurde in Qt 5.1 eingeführt. |
enum QRegularExpression::PatternOption
flags QRegularExpression::PatternOptions
Das Enum PatternOption definiert die Art und Weise, wie die Musterzeichenkette interpretiert werden soll, und damit die Art und Weise, wie das Muster mit einer bestimmten Zeichenkette übereinstimmt.
Konstante | Wert | Beschreibung |
---|---|---|
QRegularExpression::NoPatternOption | 0x0000 | Es sind keine Musteroptionen gesetzt. |
QRegularExpression::CaseInsensitiveOption | 0x0001 | Das Muster soll ohne Berücksichtigung der Groß- und Kleinschreibung mit der Betreffzeichenkette übereinstimmen. Diese Option entspricht dem Modifikator /i in regulären Ausdrücken in Perl. |
QRegularExpression::DotMatchesEverythingOption | 0x0002 | Das Punkt-Metazeichen (. ) in der Musterzeichenkette darf mit jedem Zeichen in der Betreffzeichenkette übereinstimmen, einschließlich Zeilenumbrüchen (normalerweise passt der Punkt nicht auf Zeilenumbrüche). Diese Option entspricht dem /s Modifikator in regulären Ausdrücken in Perl. |
QRegularExpression::MultilineOption | 0x0004 | Die Metazeichen Caret (^ ) und Dollar ($ ) in der Musterzeichenkette dürfen unmittelbar nach bzw. unmittelbar vor einem Zeilenumbruch in der Betreffzeichenkette sowie ganz am Anfang und ganz am Ende der Betreffzeichenkette stehen. Diese Option entspricht dem /m Modifikator in regulären Ausdrücken in Perl. |
QRegularExpression::ExtendedPatternSyntaxOption | 0x0008 | Jedes Leerzeichen in der Musterzeichenkette, das nicht mit einem Escapezeichen versehen ist und außerhalb einer Zeichenklasse liegt, wird ignoriert. Darüber hinaus bewirkt ein nicht maskierter Schrägstrich(#) außerhalb einer Zeichenklasse, dass alle folgenden Zeichen bis zum ersten Zeilenumbruch (einschließlich) ignoriert werden. Dies kann verwendet werden, um die Lesbarkeit einer Zeichenkette zu erhöhen und um Kommentare in reguläre Ausdrücke einzufügen; dies ist besonders nützlich, wenn die Zeichenkette aus einer Datei geladen oder vom Benutzer geschrieben wird, da es in C++-Code immer möglich ist, die Regeln für Stringliterale zu verwenden, um Kommentare außerhalb der Zeichenkette einzufügen. Diese Option entspricht dem /x Modifikator in regulären Ausdrücken in Perl. |
QRegularExpression::InvertedGreedinessOption | 0x0010 | Die Gier der Quantoren wird invertiert: * , + , ? , {m,n} , usw. werden faul, während ihre faulen Versionen (*? , +? , ?? , {m,n}? , usw.) gierig werden. Es gibt keine Entsprechung für diese Option in regulären Ausdrücken in Perl. |
QRegularExpression::DontCaptureOption | 0x0020 | Die nicht benannten Erfassungsgruppen erfassen keine Teilstrings; benannte Erfassungsgruppen funktionieren weiterhin wie vorgesehen, ebenso wie die implizite Erfassungsgruppe Nummer 0, die der gesamten Übereinstimmung entspricht. Es gibt keine Entsprechung für diese Option in regulären Ausdrücken in Perl. |
QRegularExpression::UseUnicodePropertiesOption | 0x0040 | Die Bedeutung der Zeichenklassen \w , \d usw. sowie die Bedeutung ihrer Gegenstücke (\W , \D usw.) wurde von der ausschließlichen Übereinstimmung mit ASCII-Zeichen auf die Übereinstimmung mit jedem Zeichen mit der entsprechenden Unicode-Eigenschaft geändert. Zum Beispiel wird \d so geändert, dass es auf jedes Zeichen mit der Unicode-Eigenschaft Nd (Dezimalziffer) passt; \w passt auf jedes Zeichen mit der Unicode-Eigenschaft L (Buchstabe) oder N (Ziffer) plus Unterstrich, und so weiter. Diese Option entspricht dem /u Modifikator in regulären Ausdrücken in Perl. |
Der Typ PatternOptions ist ein Typedef für QFlags<PatternOption>. Er speichert eine OR-Kombination von PatternOption-Werten.
[since 6.0]
enum QRegularExpression::WildcardConversionOption
flags QRegularExpression::WildcardConversionOptions
Das Enum WildcardConversionOption definiert Modifikatoren für die Art und Weise, wie ein Wildcard-Glob-Muster in ein Muster eines regulären Ausdrucks umgewandelt wird.
Konstante | Wert | Beschreibung |
---|---|---|
QRegularExpression::DefaultWildcardConversion | 0x0 | Es sind keine Konvertierungsoptionen gesetzt. |
QRegularExpression::UnanchoredWildcardConversion | 0x1 | Bei der Konvertierung wird das Muster nicht verankert. Dies ermöglicht partielle Übereinstimmungen von Platzhalterausdrücken. |
QRegularExpression::NonPathWildcardConversion (since Qt 6.6) | 0x2 | Die Konvertierung interpretiert das Muster nicht als Dateipfad-Globbing. |
Diese Aufzählung wurde in Qt 6.0 eingeführt.
Der Typ WildcardConversionOptions ist ein Typedef für QFlags<WildcardConversionOption>. Er speichert eine OR-Kombination von WildcardConversionOption-Werten.
Siehe auch QRegularExpression::wildcardToRegularExpression.
Dokumentation der Mitgliedsfunktionen
QRegularExpression::QRegularExpression()
Konstruiert ein QRegularExpression-Objekt mit einem leeren Muster und ohne Musteroptionen.
Siehe auch setPattern() und setPatternOptions().
[explicit]
QRegularExpression::QRegularExpression(const QString &pattern, QRegularExpression::PatternOptions options = NoPatternOption)
Konstruiert ein QRegularExpression-Objekt unter Verwendung des angegebenen pattern als Muster und der options als Musteroptionen.
Siehe auch setPattern() und setPatternOptions().
[noexcept]
QRegularExpression::QRegularExpression(const QRegularExpression &re)
Konstruiert ein QRegularExpression-Objekt als eine Kopie von re.
Siehe auch operator=().
[noexcept, since 6.1]
QRegularExpression::QRegularExpression(QRegularExpression &&re)
Konstruiert ein QRegularExpression-Objekt durch Verschieben von re.
Beachten Sie, dass ein verschobener QRegularExpression nur zerstört oder zugewiesen werden kann. Die Wirkung des Aufrufs anderer Funktionen als des Destruktors oder eines der Zuweisungsoperatoren ist undefiniert.
Diese Funktion wurde in Qt 6.1 eingeführt.
Siehe auch operator=().
[noexcept]
QRegularExpression::~QRegularExpression()
Zerstört das Objekt QRegularExpression.
[static]
QString QRegularExpression::anchoredPattern(QStringView expression)
Gibt die expression zurück, die zwischen den Ankern \A
und \z
eingeschlossen ist und für den exakten Abgleich verwendet wird.
[static]
QString QRegularExpression::anchoredPattern(const QString &expression)
Dies ist eine überladene Funktion.
int QRegularExpression::captureCount() const
Gibt die Anzahl der Erfassungsgruppen innerhalb der Musterzeichenkette zurück, oder -1, wenn der reguläre Ausdruck nicht gültig ist.
Hinweis: Die implizite Erfassungsgruppe 0 ist in der zurückgegebenen Zahl nicht enthalten.
Siehe auch isValid().
QString QRegularExpression::errorString() const
Gibt eine textuelle Beschreibung des Fehlers zurück, der bei der Überprüfung der Gültigkeit des regulären Ausdrucks gefunden wurde, oder "kein Fehler", wenn kein Fehler gefunden wurde.
Siehe auch isValid() und patternErrorOffset().
[static]
QString QRegularExpression::escape(QStringView str)
Maskiert alle Zeichen von str, so dass sie bei der Verwendung als Musterzeichenkette für reguläre Ausdrücke keine besondere Bedeutung mehr haben, und gibt die maskierte Zeichenkette zurück. Zum Beispiel:
QString escaped = QRegularExpression::escape("a(x) = f(x) + g(x)"); // escaped == "a\\(x\\)\\ \\=\\ f\\(x\\)\\ \\+\\ g\\(x\\)"
Dies ist sehr praktisch, um Muster aus beliebigen Zeichenketten zu erstellen:
QString pattern = "(" + QRegularExpression::escape(name) + "|" + QRegularExpression::escape(nickname) + ")"; QRegularExpression re(pattern);
Hinweis: Diese Funktion implementiert den quotemeta-Algorithmus von Perl und maskiert alle Zeichen in str mit einem Backslash, mit Ausnahme der Zeichen in den Bereichen [A-Z]
, [a-z]
und [0-9]
, sowie des Unterstrichs (_
). Der einzige Unterschied zu Perl besteht darin, dass ein NUL-Literal innerhalb von str mit der Sequenz "\\0"
(Backslash + '0'
) anstelle von "\\\0"
(Backslash + NUL
) umgangen wird.
[static]
QString QRegularExpression::escape(const QString &str)
Dies ist eine überladene Funktion.
[static, since 6.0]
QRegularExpression QRegularExpression::fromWildcard(QStringView pattern, Qt::CaseSensitivity cs = Qt::CaseInsensitive, QRegularExpression::WildcardConversionOptions options = DefaultWildcardConversion)
Gibt einen regulären Ausdruck für das globale Muster pattern zurück. Der reguläre Ausdruck unterscheidet Groß- und Kleinschreibung, wenn cs Qt::CaseSensitive ist, und wird entsprechend options konvertiert.
Äquivalent zu
auto reOptions = cs == Qt::CaseSensitive ? QRegularExpression::NoPatternOption : QRegularExpression::CaseInsensitiveOption; return QRegularExpression(wildcardToRegularExpression(str, options), reOptions);
Diese Funktion wurde in Qt 6.0 eingeführt.
QRegularExpressionMatchIterator QRegularExpression::globalMatch(const QString &subject, qsizetype offset = 0, QRegularExpression::MatchType matchType = NormalMatch, QRegularExpression::MatchOptions matchOptions = NoMatchOption) const
Versucht, eine globale Übereinstimmung des regulären Ausdrucks mit der angegebenen Zeichenkette subject durchzuführen, beginnend an der Position offset innerhalb des Betreffs, unter Verwendung einer Übereinstimmung des Typs matchType und unter Berücksichtigung der angegebenen matchOptions.
Der zurückgegebene QRegularExpressionMatchIterator wird vor dem ersten Ergebnis der Übereinstimmung positioniert (falls vorhanden).
Siehe auch QRegularExpressionMatchIterator und global matching.
[since 6.5]
QRegularExpressionMatchIterator QRegularExpression::globalMatchView(QStringView subjectView, qsizetype offset = 0, QRegularExpression::MatchType matchType = NormalMatch, QRegularExpression::MatchOptions matchOptions = NoMatchOption) const
Dies ist eine überladene Funktion.
Versucht, einen globalen Abgleich des regulären Ausdrucks mit der angegebenen Zeichenkettenansicht subjectView durchzuführen, beginnend an der Position offset innerhalb des Betreffs, unter Verwendung eines Abgleichs vom Typ matchType und unter Berücksichtigung der angegebenen matchOptions.
Das zurückgegebene QRegularExpressionMatchIterator wird vor dem ersten Treffer positioniert (falls vorhanden).
Hinweis: Die Daten, auf die subjectView verweist, müssen so lange gültig bleiben, wie es QRegularExpressionMatchIterator oder QRegularExpressionMatch Objekte gibt, die sie verwenden.
Diese Funktion wurde in Qt 6.5 eingeführt.
Siehe auch QRegularExpressionMatchIterator und global matching.
bool QRegularExpression::isValid() const
Gibt true
zurück, wenn der reguläre Ausdruck ein gültiger regulärer Ausdruck ist (d. h. er enthält keine Syntaxfehler usw.), andernfalls false. Verwenden Sie errorString(), um eine textuelle Beschreibung des Fehlers zu erhalten.
Siehe auch errorString() und patternErrorOffset().
QRegularExpressionMatch QRegularExpression::match(const QString &subject, qsizetype offset = 0, QRegularExpression::MatchType matchType = NormalMatch, QRegularExpression::MatchOptions matchOptions = NoMatchOption) const
Versucht, den regulären Ausdruck mit der angegebenen Zeichenkette subject abzugleichen, beginnend an der Position offset innerhalb des Betreffs, unter Verwendung einer Übereinstimmung des Typs matchType und unter Berücksichtigung des angegebenen matchOptions.
Das zurückgegebene QRegularExpressionMatch Objekt enthält die Ergebnisse der Übereinstimmung.
Siehe auch QRegularExpressionMatch und normal matching.
[since 6.5]
QRegularExpressionMatch QRegularExpression::matchView(QStringView subjectView, qsizetype offset = 0, QRegularExpression::MatchType matchType = NormalMatch, QRegularExpression::MatchOptions matchOptions = NoMatchOption) const
Dies ist eine überladene Funktion.
Versucht, den regulären Ausdruck mit der angegebenen Zeichenkettenansicht subjectView abzugleichen, beginnend an der Position offset innerhalb des Betreffs, unter Verwendung einer Übereinstimmung vom Typ matchType und unter Berücksichtigung der angegebenen matchOptions.
Das zurückgegebene QRegularExpressionMatch Objekt enthält die Ergebnisse der Übereinstimmung.
Hinweis: Die Daten, auf die subjectView verweist, müssen so lange gültig bleiben, wie es QRegularExpressionMatch Objekte gibt, die sie verwenden.
Diese Funktion wurde in Qt 6.5 eingeführt.
Siehe auch QRegularExpressionMatch und normal matching.
QStringList QRegularExpression::namedCaptureGroups() const
Gibt eine Liste von captureCount() + 1 Elementen zurück, die die Namen der benannten Erfassungsgruppen in der Musterzeichenfolge enthält. Die Liste ist so sortiert, dass das Element der Liste an der Position i
der Name der i
-ten Erfassungsgruppe ist, wenn sie einen Namen hat, oder eine leere Zeichenkette, wenn diese Erfassungsgruppe unbenannt ist.
Zum Beispiel, wenn der reguläre Ausdruck
(?<day>\d\d)-(?<month>\d\d)-(?<year>\d\d\d\d) (\w+) (?<name>\w+)
namedCaptureGroups() die folgende Liste zurück:
("", "day", "month", "year", "", "name")
was der Tatsache entspricht, dass die Erfassungsgruppe #0 (die der gesamten Übereinstimmung entspricht) keinen Namen hat, die Erfassungsgruppe #1 hat den Namen "Tag", die Erfassungsgruppe #2 hat den Namen "Monat", usw.
Wenn der reguläre Ausdruck nicht gültig ist, wird eine leere Liste zurückgegeben.
Siehe auch isValid(), QRegularExpressionMatch::captured(), und QString::isEmpty().
void QRegularExpression::optimize() const
Kompiliert das Muster sofort, einschließlich JIT-Kompilierung (wenn JIT aktiviert ist) zur Optimierung.
Siehe auch isValid() und Debugging Code that Uses QRegularExpression.
QString QRegularExpression::pattern() const
Gibt die Zeichenkette des regulären Ausdrucks zurück.
Siehe auch setPattern() und patternOptions().
qsizetype QRegularExpression::patternErrorOffset() const
Gibt den Offset innerhalb der Musterzeichenkette zurück, an dem bei der Überprüfung der Gültigkeit des regulären Ausdrucks ein Fehler gefunden wurde. Wurde kein Fehler gefunden, so wird -1 zurückgegeben.
Siehe auch pattern(), isValid(), und errorString().
QRegularExpression::PatternOptions QRegularExpression::patternOptions() const
Gibt die Musteroptionen für den regulären Ausdruck zurück.
Siehe auch setPatternOptions() und pattern().
void QRegularExpression::setPattern(const QString &pattern)
Setzt die Musterzeichenfolge des regulären Ausdrucks auf pattern. Die Musteroptionen bleiben unverändert.
Siehe auch pattern() und setPatternOptions().
void QRegularExpression::setPatternOptions(QRegularExpression::PatternOptions options)
Setzt die angegebene options als die Musteroptionen des regulären Ausdrucks. Die Musterzeichenkette wird unverändert gelassen.
Siehe auch patternOptions() und setPattern().
[noexcept]
void QRegularExpression::swap(QRegularExpression &other)
Tauscht diesen regulären Ausdruck mit other aus. Dieser Vorgang ist sehr schnell und schlägt nie fehl.
[static]
QString QRegularExpression::wildcardToRegularExpression(QStringView pattern, QRegularExpression::WildcardConversionOptions options = DefaultWildcardConversion)
Gibt eine Repräsentation des regulären Ausdrucks für den angegebenen glob pattern zurück.
Es sind zwei Transformationen möglich, eine, die auf Dateipfad-Globbing abzielt, und eine andere, die allgemeiner ist.
Standardmäßig zielt die Transformation auf Dateipfad-Globbing ab, was insbesondere bedeutet, dass Pfadseparatoren eine besondere Behandlung erfahren. Dies bedeutet, dass es sich nicht nur um eine einfache Übersetzung von "*" nach ".*" und ähnlichem handelt.
QString wildcard = QRegularExpression::wildcardToRegularExpression("*.jpeg"); // Will match files with names like: // foo.jpeg // f_o_o.jpeg // föö.jpeg
Die allgemeinere Globbing-Transformation ist durch die Übergabe von NonPathWildcardConversion
in der Konvertierung options verfügbar.
Diese Implementierung lehnt sich eng an die Definition von Platzhaltern für glob-Muster an:
c | Jedes Zeichen steht für sich selbst, außer den unten genannten. Somit passt c auf das Zeichen c. |
? | Passt auf ein beliebiges einzelnes Zeichen, mit Ausnahme eines Pfadseparators (falls Dateipfad-Globbing gewählt wurde). Es ist dasselbe wie b{.} in vollständigen Regexps. |
* | Passt auf null oder mehr beliebige Zeichen, mit Ausnahme von Pfadseparatoren (falls Dateipfad-Globbing ausgewählt wurde). Entspricht .* in vollständigen Regexps. |
[abc] | Passt auf ein in der Klammer angegebenes Zeichen. |
[a-c] | Passt auf ein Zeichen aus dem in der Klammer angegebenen Bereich. |
[!abc] | Passt auf ein Zeichen, das nicht in der Klammer angegeben ist. Es ist dasselbe wie [^abc] in der vollständigen Regexp. |
[!a-c] | Passt auf ein Zeichen, das nicht in dem in der Klammer angegebenen Bereich liegt. Es ist dasselbe wie [^a-c] in der vollständigen Regexp. |
Hinweis: Aus historischen Gründen ist ein Backslash (\) in diesem Zusammenhang kein Escape-Zeichen. Um eines der Sonderzeichen zu finden, setzen Sie es in eckige Klammern (z. B. [?]
).
Weitere Informationen über die Implementierung finden Sie in:
- Der Wikipedia Glob Artikel
man 7 glob
Standardmäßig ist der zurückgegebene reguläre Ausdruck vollständig verankert. Mit anderen Worten, es ist nicht notwendig, anchoredPattern() erneut auf das Ergebnis anzuwenden. Um einen regulären Ausdruck zu erhalten, der nicht verankert ist, übergeben Sie UnanchoredWildcardConversion in der Konvertierung options.
Siehe auch escape().
[static]
QString QRegularExpression::wildcardToRegularExpression(const QString &pattern, QRegularExpression::WildcardConversionOptions options = DefaultWildcardConversion)
Dies ist eine überladene Funktion.
[noexcept]
QRegularExpression &QRegularExpression::operator=(QRegularExpression &&re)
Move-weist den regulären Ausdruck re diesem Objekt zu und gibt einen Verweis auf das Ergebnis zurück. Sowohl das Muster als auch die Musteroptionen werden kopiert.
Beachten Sie, dass ein "moved-from" QRegularExpression nur zerstört oder zugewiesen werden kann. Die Auswirkungen des Aufrufs anderer Funktionen als des Destruktors oder eines der Zuweisungsoperatoren sind undefiniert.
[noexcept]
QRegularExpression &QRegularExpression::operator=(const QRegularExpression &re)
Weist diesem Objekt den regulären Ausdruck re zu und gibt einen Verweis auf die Kopie zurück. Sowohl das Muster als auch die Musteroptionen werden kopiert.
Verwandte Nicht-Mitglieder
[noexcept]
size_t qHash(const QRegularExpression &key, size_t seed = 0)
Gibt den Hash-Wert für key zurück, wobei seed als Startwert für die Berechnung verwendet wird.
[noexcept]
bool operator!=(const QRegularExpression &lhs, const QRegularExpression &rhs)
Gibt true
zurück, wenn sich der reguläre Ausdruck lhs von rhs unterscheidet, andernfalls false.
Siehe auch operator==().
QDataStream &operator<<(QDataStream &out, const QRegularExpression &re)
Schreibt den regulären Ausdruck re in den Stream out.
Siehe auch Serialisierung von Qt-Datentypen.
QDebug operator<<(QDebug debug, QRegularExpression::PatternOptions patternOptions)
Schreibt die Musteroptionen patternOptions in das Debug-Objekt debug zu Debugging-Zwecken.
Siehe auch Debugging-Techniken.
QDebug operator<<(QDebug debug, const QRegularExpression &re)
Schreibt den regulären Ausdruck re in das Debug-Objekt debug zu Debugging-Zwecken.
Siehe auch Debugging-Techniken.
[noexcept]
bool operator==(const QRegularExpression &lhs, const QRegularExpression &rhs)
Gibt true
zurück, wenn der reguläre Ausdruck lhs mit rhs übereinstimmt, andernfalls false. Zwei QRegularExpression Objekte sind gleich, wenn sie die gleiche Musterzeichenfolge und die gleichen Musteroptionen haben.
Siehe auch operator!=().
QDataStream &operator>>(QDataStream &in, QRegularExpression &re)
Liest einen regulären Ausdruck aus stream in in re.
Siehe auch Serialisierung von Qt-Datentypen.
© 2025 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.