Auf dieser Seite

QRegularExpression Class

Die Klasse „QRegularExpression“ ermöglicht den Abgleich mit Mustern mithilfe regulärer Ausdrücke. Mehr...

Header: #include <QRegularExpression>
CMake: find_package(Qt6 REQUIRED COMPONENTS Core)
target_link_libraries(mytarget PRIVATE Qt6::Core)
qmake: QT += core

Hinweis: Alle Funktionen dieser Klasse sind reentrant.

Vergleiche mit QRegularExpression

KategorieVergleichbare Typen
GleichheitQRegularExpression

Ö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)
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)

Ausführliche Beschreibung

Reguläre Ausdrücke, auch Regexps genannt, sind ein sehr leistungsfähiges Werkzeug zur Verarbeitung von Zeichenketten und Texten. Dies ist in vielen Zusammenhängen nützlich, z. B.

ValidierungEin Regexp kann prüfen, ob eine Teilzeichenfolge bestimmte Kriterien erfüllt, z. B. ob es sich um eine ganze Zahl handelt oder ob sie keine Leerzeichen enthält.
SucheEin Regex bietet leistungsfähigere Mustererkennung als der einfache Abgleich von Teilzeichenfolgen, z. B. um eines der Wörter „Mail“, „Letter“ oder „Correspondence“ zu finden, aber keines der Wörter „E-Mail“, „Mailman“, „Mailer“, „Letterbox“ usw.
Suchen und ErsetzenEin regulärer Ausdruck kann alle Vorkommen einer Teilzeichenfolge durch eine andere Teilzeichenfolge ersetzen, z. B. alle Vorkommen von „&“ durch „&amp;“ ersetzen, außer an Stellen, an denen auf das „&“ bereits ein „amp;“ folgt.
ZeichenfolgenaufteilungEin regulärer Ausdruck kann verwendet werden, um zu ermitteln, an welcher Stelle eine Zeichenkette geteilt werden soll, z. B. beim Aufteilen von durch Tabulatoren getrennten Zeichenketten.

Dieses Dokument ist keineswegs eine vollständige Referenz zum Musterabgleich mit regulären Ausdrücken, und die folgenden Abschnitte setzen beim Leser gewisse Grundkenntnisse über Perl-ähnliche reguläre Ausdrücke und deren Mustersyntax voraus.

Zu den empfehlenswerten Nachschlagewerken zum Thema reguläre Ausdrücke gehören:

Einleitung

QRegularExpression implementiert Perl-kompatible reguläre Ausdrücke. Es unterstützt Unicode vollständig. Einen Überblick über die von QRegularExpression unterstützte Syntax regulärer Ausdrücke finden Sie in der oben genannten Manpage pcrepattern(3). Ein regulärer Ausdruck besteht aus zwei Teilen: einer Musterzeichenfolge und einer Reihe von Musteroptionen, die die Bedeutung der Musterzeichenfolge verändern.

Sie können die Musterzeichenfolge festlegen, indem Sie dem Konstruktor von QRegularExpression eine Zeichenkette übergeben:

QRegularExpression re("a pattern");

Dadurch wird die Musterzeichenfolge 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 escapen müssen:

// matches two digits followed by a space and a word
QRegularExpression re("\\d\\d \\w+");

// matches a backslash
QRegularExpression re2("\\\\");

Alternativ können Sie ein Raw-String-Literal verwenden. In diesem Fall müssen Sie Backslashes im Muster nicht mit einem Backslash maskieren, da alle Zeichen zwischen R"(...)" als Raw-Zeichen behandelt 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"

Musteroptionen

Die Bedeutung der Musterzeichenfolge kann durch das Festlegen einer oder mehrerer Musteroptionen geändert werden. So ist es beispielsweise möglich, ein Muster so einzustellen, dass es groß- und kleinschreibungsunabhängig passt, indem die Option ` QRegularExpression::CaseInsensitiveOption` gesetzt wird.

Sie können die Optionen festlegen, indem Sie sie an den Konstruktor von `QRegularExpression` übergeben, wie im folgenden Beispiel:

// 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 vorhandenes `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)

Mit der Funktion ` patternOptions()` lassen sich die aktuell für ein `QRegularExpression`-Objekt festgelegten Musteroptionen abrufen:

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 zur enum „ QRegularExpression::PatternOption “.

Übereinstimmungstyp und Übereinstimmungsoptionen

Die letzten beiden Argumente der Funktionen ` match()` und ` globalMatch()` legen den Abgleichtyp und die Abgleichoptionen fest. Der Abgleichtyp ist ein Wert der Enumeration „ QRegularExpression::MatchType “; der „traditionelle“ Abgleichalgorithmus wird durch Verwendung des Abgleichtyps „ NormalMatch “ (Standard) ausgewählt. Es ist auch möglich, einen partiellen Abgleich des regulären Ausdrucks mit einer Zielzeichenfolge zu aktivieren: Weitere Details finden Sie im Abschnitt „ partial matching “.

Die Übereinstimmungsoptionen bestehen aus einer oder mehreren Werten der Enumeration „ QRegularExpression::MatchOption “. Sie beeinflussen die Art und Weise, wie eine bestimmte Übereinstimmung eines regulären Ausdrucks mit einer Zielzeichenfolge durchgeführt wird. Weitere Details finden Sie in der Dokumentation zur Enumeration „ QRegularExpression::MatchOption “.

Normales Abgleichen

Um einen Abgleich durchzuführen, können Sie einfach die Funktion ` match()` aufrufen und dabei eine Zeichenkette übergeben, gegen die abgeglichen werden soll. Diese Zeichenkette bezeichnen wir als Zielzeichenkette. Das Ergebnis der Funktion ` match()` ist ein ` QRegularExpressionMatch `-Objekt, mit dem Sie die Ergebnisse des Abgleichs überprüfen 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

Ist der Abgleich erfolgreich, kann die (implizite) Erfassungsgruppe Nummer 0 verwendet werden, um die Teilzeichenfolge abzurufen, die mit dem gesamten Muster übereinstimmt (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, einen Abgleich an einer beliebigen Stelle innerhalb der Suchzeichenfolge zu beginnen, indem der Offset als Argument der Funktion ` match()` übergeben wird. Im folgenden Beispiel wird „ "12 abc" “ nicht gefunden, da der Abgleich ab 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 von erfassten Teilzeichenfolgen

Das ` QRegularExpressionMatch `-Objekt enthält außerdem Informationen zu den Teilzeichenfolgen, die von den Erfassungsgruppen im Musterzeichenfolgen-String erfasst wurden. Die Funktion ` captured()` gibt die von der n-ten Erfassungsgruppe erfasste Zeichenfolge zurück:

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"
    // ...
}

Erfassungsgruppen im Muster werden beginnend mit 1 nummeriert, und die implizite Erfassungsgruppe 0 wird verwendet, um die Teilzeichenfolge zu erfassen, die mit dem gesamten Muster übereinstimmt.

Es ist außerdem möglich, den Start- und End-Offset (innerhalb der Zielzeichenfolge) jeder erfassten Teilzeichenfolge mithilfe der Funktionen ` capturedStart()` und ` capturedEnd()` abzurufen:

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 verfügen über eine Überladung, die einen „ QString “ als Parameter akzeptiert, um benannte erfasste Teilzeichenfolgen 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
}

Globales Abgleichen

Der globale Abgleich ist nützlich, um alle Vorkommen eines bestimmten regulären Ausdrucks innerhalb einer Zielzeichenfolge zu finden. Angenommen, wir möchten alle Wörter aus einer gegebenen Zeichenfolge extrahieren, wobei ein Wort eine Teilzeichenfolge ist, die dem Muster \w+ entspricht.

QRegularExpression::globalMatch gibt ein ` QRegularExpressionMatchIterator` zurück, bei dem es sich um einen Java-ähnlichen Vorwärtsiterator handelt, mit dem die Ergebnisse durchlaufen werden können. Zum Beispiel:

QRegularExpression re("(\\w+)");
QRegularExpressionMatchIterator i = re.globalMatch("the quick fox");

Da es sich um einen Java-ähnlichen Iterator handelt, zeigt der „ QRegularExpressionMatchIterator “ unmittelbar vor dem ersten Ergebnis. Jedes Ergebnis wird als „ QRegularExpressionMatch “-Objekt zurückgegeben. Die Funktion „ hasNext()“ gibt „true“ zurück, wenn mindestens ein weiteres Ergebnis vorhanden ist, und „ next()“ gibt das nächste Ergebnis zurück und verschiebt den Iterator um einen Schritt weiter. Anknüpfend an das vorherige Beispiel:

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 abzurufen, ohne den Iterator weiterzuschreiten.

Es ist auch möglich, das Ergebnis von ` QRegularExpression::globalMatch ` einfach in einer bereichsbasierten `for`-Schleife zu verwenden, beispielsweise wie folgt:

// 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 Start-Offset und eine oder mehrere Übereinstimmungsoptionen an die Funktion ` globalMatch()` zu übergeben, genau wie beim normalen Abgleich mit ` match()`.

Teilweise Übereinstimmung

Ein Teilabgleich liegt vor, wenn das Ende der Suchzeichenfolge erreicht ist, aber noch weitere Zeichen benötigt werden, um den Abgleich erfolgreich abzuschließen. Beachten Sie, dass ein Teilabgleich in der Regel wesentlich ineffizienter ist als ein normaler Abgleich, da viele Optimierungen des Abgleichalgorithmus nicht angewendet werden können.

Ein Teilabgleich muss explizit angefordert werden, indem beim Aufruf von ` QRegularExpression::match ` oder ` QRegularExpression::globalMatch` der Abgleichstyp ` PartialPreferCompleteMatch ` oder ` PartialPreferFirstMatch ` angegeben wird. Wird ein Teilabgleich gefunden, gibt der Aufruf der Funktion ` hasMatch()` auf das von ` match()` zurückgegebene ` QRegularExpressionMatch `-Objekt ` false` zurück, während ` hasPartialMatch()` ` true` zurückgibt.

Wird eine teilweise Übereinstimmung gefunden, werden keine erfassten Teilzeichenfolgen zurückgegeben, und die (implizite) Erfassungsgruppe 0, die der gesamten Übereinstimmung entspricht, erfasst die teilweise übereinstimmende Teilzeichenfolge der Zielzeichenfolge.

Beachten Sie, dass die Abfrage nach einer Teilübereinstimmung dennoch zu einer vollständigen Übereinstimmung führen kann, sofern eine solche gefunden wird; in diesem Fall gibt „ hasMatch()“ „ true “ und „ hasPartialMatch()“ „ false “ zurück. Es kommt niemals vor, dass „ QRegularExpressionMatch “ sowohl eine Teil- als auch eine vollständige Übereinstimmung meldet.

Der Teilabgleich ist vor allem in zwei Szenarien nützlich: bei der Echtzeit-Validierung von Benutzereingaben und beim inkrementellen/mehrsegmentigen Abgleich.

Validierung von Benutzereingaben

Angenommen, wir möchten, dass der Benutzer ein Datum in einem bestimmten Format eingibt, zum Beispiel „MMM dd, yyyy“. 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 erkennt zwar keine ungültigen Tage, aber behalten wir es für die Zwecke dieses Beispiels bei).

Wir möchten die Eingabe mit diesem regulären Ausdruck validieren, während der Benutzer sie eingibt, damit wir einen Fehler in der Eingabe melden können, sobald diese bestätigt wird (beispielsweise 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 stimmt derzeit nicht mit dem regulären Ausdruck überein, wird dies aber tun, wenn weitere Zeichen hinzugefügt werden.

Beachten Sie, dass diese drei Fälle genau die möglichen Zustände eines „ QValidator “ darstellen (siehe die Enumeration „ QValidator::State “).

Insbesondere im letzten Fall soll die Engine für reguläre Ausdrücke eine teilweise Übereinstimmung melden: Wir gleichen das Muster erfolgreich mit der Zielzeichenkette ab, doch der Abgleich kann nicht fortgesetzt werden, da das Ende der Zielzeichenkette erreicht wurde. Beachten Sie jedoch, dass der Abgleichalgorithmus fortfahren und alle Möglichkeiten prüfen sollte; 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 das Abgleichen desselben regulären Ausdrucks mit der Zielzeichenfolge zu einer vollständigen Übereinstimmung führt, wird diese wie gewohnt 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 einer teilweisen vorgezogen 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 Suchzeichenfolge überein; das Teilmuster „ def “ stimmt jedoch vollständig mit der Suchzeichenfolge überein, weshalb eine vollständige Übereinstimmung gemeldet wird.

Werden beim Abgleich mehrere Teilübereinstimmungen gefunden (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/mehrsegmentiger Abgleich

Der inkrementelle Abgleich ist ein weiterer Anwendungsfall des Teilabgleichs. Angenommen, wir möchten die Vorkommen eines regulären Ausdrucks in einem großen Text finden (d. h. Teilzeichenfolgen, die mit dem regulären Ausdruck übereinstimmen). Dazu möchten wir den großen Text in kleineren Blöcken an die regulären Ausdrucks-Engines „übergeben“. Das offensichtliche Problem ist: Was passiert, wenn sich die Teilzeichenfolge, die mit dem regulären Ausdruck übereinstimmt, über zwei oder mehr Teile erstreckt?

In diesem Fall sollte die Engine für reguläre Ausdrücke eine Teilübereinstimmung melden, damit wir den Abgleich unter Hinzufügung neuer Daten wiederholen und (schließlich) eine vollständige Übereinstimmung erhalten können. Dies bedeutet, dass die Engine für reguläre Ausdrücke davon ausgehen darf, dass sich hinter dem Ende der Suchzeichenfolge noch weitere Zeichen befinden. Dies ist nicht wörtlich zu nehmen – die Engine wird niemals versuchen, auf ein Zeichen zuzugreifen, das nach dem letzten Zeichen der Suchzeichenfolge liegt.

QRegularExpression implementiert dieses Verhalten bei Verwendung des Übereinstimmungstyps „ PartialPreferFirstMatch “. Dieser Übereinstimmungstyp meldet eine Teilübereinstimmung, sobald sie gefunden wird, und andere Übereinstimmungsalternativen werden nicht ausprobiert (selbst 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 Abgleichen des ersten Zweigs des Alternativoperators eine teilweise Übereinstimmung gefunden wird und der Abgleich daher beendet wird, ohne den zweiten Zweig zu versuchen. Ein weiteres Beispiel:

QRegularExpression re("abc(def)?");
QRegularExpressionMatch match = re.match("abc", 0, QRegularExpression::PartialPreferFirstMatch);
bool hasMatch = match.hasMatch(); // false
bool hasPartialMatch = match.hasPartialMatch(); // true

Dies veranschaulicht ein auf den ersten Blick vielleicht kontraintuitives Verhalten von Quantoren: Da „ ? “ gierig ist, versucht die Engine zunächst, den Abgleich nach dem Abgleich von „ "abc" “ fortzusetzen; doch dann erreicht der Abgleich das Ende der Suchzeichenfolge, weshalb ein Teilabgleich gemeldet wird. 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 lässt sich leicht nachvollziehen, wenn man bedenkt, dass die Suchmaschine davon ausgeht, dass die Suchzeichenfolge lediglich eine Teilzeichenfolge des gesamten Textes ist, in dem nach einer Übereinstimmung gesucht wird (das heißt, wie bereits erwähnt, geht die Suchmaschine davon aus, dass sich hinter dem Ende der Suchzeichenfolge weitere Zeichen befinden).

Da der Quantor „ * “ gierig ist, könnte die Meldung eines vollständigen Treffers ein Fehler sein, da nach dem aktuellen Such "abc" „ "abc" “ noch weitere Vorkommen folgen könnten. Beispielsweise hätte der vollständige Text „abcabcX“ lauten können, und daher wäre die richtige Übereinstimmung (im vollständigen Text) „ "abcabc" “ gewesen; durch den Abgleich nur mit dem führenden „ "abc" “ erhalten wir stattdessen eine teilweise Übereinstimmung.

Fehlerbehandlung

Ein `QRegularExpression`-Objekt kann aufgrund von Syntaxfehlern in der Musterzeichenfolge ungültig sein. 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

Weitere Informationen zum jeweiligen Fehler erhalten Sie durch Aufruf der Funktion ` errorString()`; darüber hinaus 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
    // ...
}

Wird ein Abgleich mit einem ungültigen `QRegularExpression` versucht, ist das zurückgegebene ` QRegularExpressionMatch `-Objekt ebenfalls ungültig (d. h., seine Funktion ` isValid()` gibt `false` zurück). Dasselbe gilt für den Versuch eines globalen Abgleichs.

Nicht unterstützte Funktionen von Perl-kompatiblen regulären Ausdrücken

QRegularExpression unterstützt nicht alle Funktionen, die in Perl-kompatiblen regulären Ausdrücken verfügbar sind. Am auffälligsten ist dabei, dass doppelte Namen für Erfassungsgruppen nicht unterstützt werden; deren Verwendung kann zu undefiniertem Verhalten führen.

Dies kann sich in einer zukünftigen Version von Qt ändern.

Debugging von Code, der QRegularExpression verwendet

QRegularExpression nutzt intern einen Just-in-Time-Compiler (JIT), um die Ausführung des Abgleichalgorithmus zu optimieren. Der JIT macht ausgiebig Gebrauch von selbstmodifizierendem Code, was dazu führen kann, dass Debugging-Tools wie Valgrind abstürzen. Sie müssen alle Prüfungen auf selbstmodifizierenden Code aktivieren, wenn Sie Programme debuggen möchten, die QRegularExpression verwenden (zum Beispiel die Befehlszeilenoption „ --smc-check “ von Valgrind). Der Nachteil bei der Aktivierung solcher Prüfungen ist, dass Ihr Programm deutlich langsamer läuft.

Um dies zu vermeiden, ist der JIT standardmäßig deaktiviert, wenn Sie Qt im Debug-Modus kompilieren. Es ist möglich, die Standardeinstellung zu überschreiben und die Verwendung des JIT (sowohl im Debug- als auch im Release-Modus) zu aktivieren oder zu deaktivieren, indem Sie die Umgebungsvariable ` QT_ENABLE_REGEXP_JIT ` auf einen Wert ungleich Null bzw. auf Null setzen.

Siehe auch QRegularExpressionMatch und QRegularExpressionMatchIterator.

Dokumentation zu Mitgliedstypen

enum QRegularExpression::MatchOption
flags QRegularExpression::MatchOptions

KonstanteWertBeschreibung
QRegularExpression::NoMatchOption0x0000Es sind keine Übereinstimmungsoptionen festgelegt.
QRegularExpression::AnchoredMatchOptionAnchorAtOffsetMatchOptionVerwenden Sie stattdessen die Option „AnchorAtOffsetMatchOption“.
QRegularExpression::AnchorAtOffsetMatchOption0x0001Die Übereinstimmung muss genau an dem an „ match()“ übergebenen Offset beginnen, um erfolgreich zu sein – selbst wenn die Musterzeichenfolge kein Metazeichen enthält, das die Übereinstimmung an dieser Stelle verankert. Beachten Sie, dass die Übergabe dieser Option das Ende des Abgleichs nicht am Ende der Suchzeichenfolge verankert; wenn Sie einen regulären Ausdruck vollständig verankern möchten, verwenden Sie „ anchoredPattern()“. Dieser Enum-Wert wurde in Qt 6.0 eingeführt.
QRegularExpression::DontCheckSubjectStringMatchOption0x0002Die Gültigkeit der Suchzeichenfolge hinsichtlich UTF-16 wird vor dem Abgleichversuch nicht überprüft. Verwenden Sie diese Option mit äußerster Vorsicht, da der Versuch, eine ungültige Zeichenfolge abzugleichen, zum Absturz des Programms führen und/oder ein Sicherheitsrisiko 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 ODER-Kombination von `MatchOption`-Werten.

enum QRegularExpression::MatchType

Die Enumeration „MatchType“ definiert die Art des Abgleichs, der mit der Zielzeichenfolge versucht werden soll.

KonstanteWertBeschreibung
QRegularExpression::NormalMatch0Es wird ein normaler Abgleich durchgeführt.
QRegularExpression::PartialPreferCompleteMatch1Die Musterzeichenfolge wird teilweise mit der Zielzeichenfolge abgeglichen. Wird eine Teilübereinstimmung gefunden, wird diese erfasst, und es werden wie gewohnt weitere Übereinstimmungsalternativen geprüft. Wird anschließend eine vollständige Übereinstimmung gefunden, hat diese Vorrang vor der teilweisen Übereinstimmung; in diesem Fall wird nur die vollständige Übereinstimmung gemeldet. Wird hingegen keine vollständige Übereinstimmung gefunden (sondern nur die teilweise), wird die teilweise Übereinstimmung gemeldet.
QRegularExpression::PartialPreferFirstMatch2Die Musterzeichenfolge wird teilweise mit der Suchzeichenfolge abgeglichen. Wird eine Teilübereinstimmung gefunden, wird der Abgleich beendet und die Teilübereinstimmung gemeldet. In diesem Fall werden keine weiteren Abgleichalternativen (die möglicherweise zu einer vollständigen Übereinstimmung führen könnten) geprüft. Zudem geht dieser Übereinstimmungstyp davon aus, dass die Suchzeichenfolge nur eine Teilzeichenfolge eines größeren Textes ist und dass (in diesem Text) über das Ende der Suchzeichenfolge hinaus weitere Zeichen vorhanden sind. Dies kann zu überraschenden Ergebnissen führen; weitere Details findest du in der Erläuterung im Abschnitt „ partial matching “.
QRegularExpression::NoMatch3Es wird kein Abgleich durchgeführt. Dieser Wert wird als Abgleichstyp von einem standardmäßig erstellten ` QRegularExpressionMatch ` oder ` QRegularExpressionMatchIterator` zurückgegeben. Die Verwendung dieses Abgleichtyps ist für den Benutzer nicht sehr nützlich, da niemals ein Abgleich stattfindet. Dieser Enum-Wert wurde in Qt 5.1 eingeführt.

enum QRegularExpression::PatternOption
flags QRegularExpression::PatternOptions

Die Enumeration „PatternOption“ definiert Modifikatoren für die Interpretation der Musterzeichenfolge und damit für die Art und Weise, wie das Muster mit einer Zielzeichenfolge abgeglichen wird.

KonstanteWertBeschreibung
QRegularExpression::NoPatternOption0x0000Es sind keine Musteroptionen festgelegt.
QRegularExpression::CaseInsensitiveOption0x0001Das Muster soll ohne Berücksichtigung der Groß-/Kleinschreibung mit der Zielzeichenfolge abgeglichen werden. Diese Option entspricht dem Modifikator /i in Perl-regulären Ausdrücken.
QRegularExpression::DotMatchesEverythingOption0x0002Das Metazeichen „Punkt“ (.) in der Musterzeichenfolge darf mit jedem beliebigen Zeichen in der Suchzeichenfolge übereinstimmen, einschließlich Zeilenumbrüchen (normalerweise passt der Punkt nicht auf Zeilenumbrüche). Diese Option entspricht dem Modifikator „ /s “ in Perl-regulären Ausdrücken.
QRegularExpression::MultilineOption0x0004Die Metazeichen Caret (^) und Dollar ($) in der Musterzeichenfolge dürfen jeweils unmittelbar nach und unmittelbar vor einem Zeilenumbruch in der Suchzeichenfolge sowie ganz am Anfang und ganz am Ende der Suchzeichenfolge übereinstimmen. Diese Option entspricht dem Modifikator „ /m “ in regulären Ausdrücken von Perl.
QRegularExpression::ExtendedPatternSyntaxOption0x0008Jedes Leerzeichen im Mustertext, das nicht mit einem Escape-Zeichen versehen ist und sich außerhalb einer Zeichenklasse befindet, wird ignoriert. Darüber hinaus bewirkt ein nicht mit einem Escape-Zeichen versehenes Rautezeichen (#) außerhalb einer Zeichenklasse, dass alle folgenden Zeichen bis zum ersten Zeilenumbruch (einschließlich) ignoriert werden. Dies kann genutzt werden, um die Lesbarkeit einer Musterzeichenfolge zu verbessern sowie Kommentare in reguläre Ausdrücke einzufügen; dies ist besonders nützlich, wenn die Musterzeichenfolge aus einer Datei geladen oder vom Benutzer geschrieben wird, da es in C++-Code immer möglich ist, die Regeln für Zeichenfolgenliterale zu nutzen, um Kommentare außerhalb der Musterzeichenfolge zu platzieren. Diese Option entspricht dem Modifikator „ /x “ in Perl-regulären Ausdrücken.
QRegularExpression::InvertedGreedinessOption0x0010Die „Gierigkeit“ der Quantoren wird umgekehrt: „ * “, „ + “, „ ? “, „ {m,n} “ usw. werden „lazy“, während ihre „lazy“-Versionen („*? “, „ +? “, „ ?? “, „ {m,n}? “ usw.) „greedy“ werden. In regulären Ausdrücken von Perl gibt es kein Äquivalent für diese Option.
QRegularExpression::DontCaptureOption0x0020Die unbenannten Erfassungsgruppen erfassen keine Teilzeichenfolgen; benannte Erfassungsgruppen funktionieren weiterhin wie vorgesehen, ebenso wie die implizite Erfassungsgruppe Nummer 0, die der gesamten Übereinstimmung entspricht. In Perl-Regulären Ausdrücken gibt es keine Entsprechung für diese Option.
QRegularExpression::UseUnicodePropertiesOption0x0040Die Bedeutung der Zeichenklassen „ \w “, „ \d “ usw. sowie die Bedeutung ihrer Entsprechungen („\W “, „ \D “ usw.) ändert sich von der Übereinstimmung ausschließlich mit ASCII-Zeichen hin zur Übereinstimmung mit jedem Zeichen, das die entsprechende Unicode-Eigenschaft aufweist. Beispielsweise wird „ \d “ so geändert, dass es mit jedem Zeichen mit der Unicode-Eigenschaft „Nd“ (dezimale Ziffer) übereinstimmt; „ \w “ so, dass es mit jedem Zeichen mit der Unicode-Eigenschaft „L“ (Buchstabe) oder „N“ (Ziffer) sowie mit dem Unterstrich übereinstimmt, und so weiter. Diese Option entspricht dem Modifikator „ /u “ in Perl-Regulären Ausdrücken.

Der Typ „PatternOptions“ ist ein Typedef für „QFlags<PatternOption>“. Er speichert eine ODER-Kombination von „PatternOption“-Werten.

[since 6.0] enum QRegularExpression::WildcardConversionOption
flags QRegularExpression::WildcardConversionOptions

Die Enumeration „WildcardConversionOption“ definiert Modifikatoren für die Art und Weise, wie ein Wildcard-Glob-Muster in ein reguläres Ausdrucksmuster umgewandelt wird.

KonstanteWertBeschreibung
QRegularExpression::DefaultWildcardConversion0x0Es sind keine Konvertierungsoptionen festgelegt.
QRegularExpression::UnanchoredWildcardConversion0x1Bei der Konvertierung wird das Muster nicht verankert. Dies ermöglicht teilweise Übereinstimmungen von Zeichenfolgen mit Platzhalterausdrücken.
QRegularExpression::NonPathWildcardConversion (since Qt 6.6)0x2Die Konvertierung interpretiert das Muster nicht als Dateipfad-Globbing.

Diese Enumeration wurde in Qt 6.0 eingeführt.

Der Typ `WildcardConversionOptions` ist ein `typedef` für ` QFlags<WildcardConversionOption>`. Er speichert eine ODER-Kombination von `WildcardConversionOption`-Werten.

Siehe auch „ QRegularExpression::wildcardToRegularExpression “.

Dokumentation zu den Mitgliedsfunktionen

QRegularExpression::QRegularExpression()

Erstellt 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)

Erstellt ein QRegularExpression-Objekt unter Verwendung des angegebenen „ pattern “ als Muster und des „ options “ als Musteroptionen.

Siehe auch setPattern() und setPatternOptions().

[noexcept] QRegularExpression::QRegularExpression(const QRegularExpression &re)

Erstellt ein QRegularExpression-Objekt als Kopie von re.

Siehe auch ` operator=()`.

[constexpr noexcept default, since 6.1] QRegularExpression::QRegularExpression(QRegularExpression &&re)

Erstellt ein QRegularExpression-Objekt, indem es von re verschoben wird.

Beachten Sie, dass ein von „xml-ph-0000@deepl.internal“ verschobenes QRegularExpression-Objekt nur zerstört oder zugewiesen werden kann. Die Auswirkungen des Aufrufs anderer Funktionen als des Destruktors oder eines der Zuweisungsoperatoren sind undefiniert.

Diese Funktion wurde in Qt 6.1 eingeführt.

Siehe auch operator=().

[noexcept] QRegularExpression::~QRegularExpression()

Löscht das „ QRegularExpression “-Objekt.

[static] QString QRegularExpression::anchoredPattern(QStringView expression)

Gibt den Ausdruck „ expression “ zurück, der von den Ankern „ \A “ und „ \z “ umschlossen ist und für den exakten Abgleich verwendet werden soll.

[static] QString QRegularExpression::anchoredPattern(const QString &expression)

Dies ist eine überladene Funktion.

int QRegularExpression::captureCount() const

Gibt die Anzahl der Erfassungsgruppen innerhalb der Musterzeichenfolge zurück oder -1, wenn der reguläre Ausdruck ungü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 festgestellt wurde, oder „kein Fehler“, wenn kein Fehler gefunden wurde.

Siehe auch isValid() und patternErrorOffset().

[static] QString QRegularExpression::escape(QStringView str)

Escapet alle Zeichen aus „ str “, sodass sie bei der Verwendung als Musterzeichenfolge für reguläre Ausdrücke keine Sonderbedeutung mehr haben, und gibt die escaped Zeichenfolge 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 Zeichenfolgen zu erstellen:

QString pattern = "(" + QRegularExpression::escape(name) +
                "|" + QRegularExpression::escape(nickname) + ")";
QRegularExpression re(pattern);

Hinweis: Diese Funktion implementiert den Quotemeta-Algorithmus von Perl und escapt 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') statt mit „ "\\\0" “ (Backslash + NUL) maskiert 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 des Glob-Musters pattern zurück. Der reguläre Ausdruck unterscheidet zwischen Groß- und Kleinschreibung, wenn cs auf Qt::CaseSensitive gesetzt ist, und wird gemäß options konvertiert.

Entspricht

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

Es wird versucht, eine globale Übereinstimmung des regulären Ausdrucks mit der angegebenen Zeichenfolge subject durchzuführen, beginnend an der Position offset innerhalb des Suchtextes, unter Verwendung einer Übereinstimmungsart vom Typ matchType und unter Berücksichtigung der angegebenen matchOptions.

Die zurückgegebene Zeichenkette ` QRegularExpressionMatchIterator ` befindet sich vor dem ersten Übereinstimmungsergebnis (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

Es wird versucht, eine globale Übereinstimmung des regulären Ausdrucks mit der angegebenen Zeichenfolge „ subjectView “ durchzuführen, beginnend an der Position „ offset “ innerhalb des Suchtextes, unter Verwendung einer Übereinstimmungsart vom Typ „ matchType “ und unter Berücksichtigung der angegebenen „ matchOptions “.

Der zurückgegebene QRegularExpressionMatchIterator befindet sich vor dem ersten Übereinstimmungsergebnis (falls vorhanden).

Hinweis: Die Daten, auf die subjectView verweist, müssen gültig bleiben, solange es Objekte vom Typ QRegularExpressionMatchIterator oder QRegularExpressionMatch gibt, die darauf zugreifen.

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 gültig ist (d. h. keine Syntaxfehler usw. enthält), 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

Es wird versucht, den regulären Ausdruck mit der angegebenen Zeichenkette „ subject “ abzugleichen, beginnend an der Position „ offset “ innerhalb des Suchtextes, unter Verwendung eines Abgleichtyps „ matchType “ und unter Berücksichtigung der angegebenen „ matchOptions “.

Das zurückgegebene QRegularExpressionMatch -Objekt enthält die Ergebnisse des Abgleichs.

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

Es wird versucht, den regulären Ausdruck mit der angegebenen Zeichenfolgenansicht „ subjectView “ abzugleichen, beginnend an der Position „ offset “ innerhalb des Suchtextes, unter Verwendung eines Abgleichtyps „ matchType “ und unter Berücksichtigung der angegebenen „ matchOptions “.

Das zurückgegebene QRegularExpressionMatch -Objekt enthält die Ergebnisse des Abgleichs.

Hinweis: Die von ` subjectView ` referenzierten Daten müssen gültig bleiben, solange es ` QRegularExpressionMatch `-Objekte gibt, die darauf zugreifen.

Diese Funktion wurde in Qt 6.5 eingeführt.

Siehe auch „ QRegularExpressionMatch “ und „ normal matching “.

QStringList QRegularExpression::namedCaptureGroups() const

Gibt eine Liste mit captureCount() + 1 Elementen zurück, die die Namen der benannten Erfassungsgruppen in der Musterzeichenfolge enthält. Die Liste ist so sortiert, dass das Element an Position i der Name der i-ten Erfassungsgruppe ist, sofern diese einen Namen hat, oder eine leere Zeichenfolge, falls diese Erfassungsgruppe unbenannt ist.

Beispielsweise gibt der reguläre Ausdruck

    (?<day>\d\d)-(?<month>\d\d)-(?<year>\d\d\d\d) (\w+) (?<name>\w+)

gibt `namedCaptureGroups()` die folgende Liste zurück:

    ("", "day", "month", "year", "", "name")

Dies entspricht der Tatsache, dass die Erfassungsgruppe Nr. 0 (die der gesamten Übereinstimmung entspricht) keinen Namen hat, die Erfassungsgruppe Nr. 1 den Namen „day“ hat, die Erfassungsgruppe Nr. 2 den Namen „month“ hat usw.

Ist der reguläre Ausdruck ungültig, wird eine leere Liste zurückgegeben.

Siehe auch isValid(), QRegularExpressionMatch::captured() und QString::isEmpty().

void QRegularExpression::optimize() const

Kompiliert das Muster sofort, einschließlich der JIT-Kompilierung (sofern JIT aktiviert ist) zur Optimierung.

Siehe auch isValid() und Debugging Code that Uses QRegularExpression.

QString QRegularExpression::pattern() const

Gibt die Musterzeichenfolge des regulären Ausdrucks zurück.

Siehe auch setPattern() und patternOptions().

qsizetype QRegularExpression::patternErrorOffset() const

Gibt den Offset innerhalb der Musterzeichenfolge zurück, an dem bei der Überprüfung der Gültigkeit des regulären Ausdrucks ein Fehler gefunden wurde. Wurde kein Fehler gefunden, 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)

Legt die angegebene „ options “ als Musteroptionen für den regulären Ausdruck fest. Die Musterzeichenfolge bleibt unverändert.

Siehe auch ` patternOptions()` und ` setPattern()`.

[noexcept] void QRegularExpression::swap(QRegularExpression &other)

Ersetzt diesen regulären Ausdruck durch „ other “. Dieser Vorgang ist sehr schnell und schlägt niemals fehl.

[static] QString QRegularExpression::wildcardToRegularExpression(QStringView pattern, QRegularExpression::WildcardConversionOptions options = DefaultWildcardConversion)

Gibt eine Darstellung des angegebenen Glob-Ausdrucks pattern als regulären Ausdruck zurück.

Es sind zwei Transformationen möglich: eine, die auf das Globbing von Dateipfaden abzielt, und eine andere, die allgemeiner gehalten ist.

Standardmäßig zielt die Transformation auf das Globbing von Dateipfaden ab, was insbesondere bedeutet, dass Pfadtrennzeichen eine spezielle Behandlung erfahren. Dies impliziert, dass es sich nicht nur um eine einfache Übersetzung von „*“ in „.*“ und Ähnliches 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 verfügbar, indem „ NonPathWildcardConversion “ im Konvertierungs options “ übergeben wird.

Diese Implementierung orientiert sich eng an der Definition von Platzhaltern für Globbing-Muster:

cJedes Zeichen steht für sich selbst, mit Ausnahme der unten genannten. Somit entspricht „c“ dem Zeichen „c“.
?Stimmt mit einem beliebigen einzelnen Zeichen überein, mit Ausnahme eines Pfadtrennzeichens (sofern die Globbing-Funktion für Dateipfade ausgewählt wurde). Dies entspricht b{.} in vollständigen regulären Ausdrücken.
*Stimmt mit null oder mehr beliebigen Zeichen überein, mit Ausnahme von Pfadtrennzeichen (sofern die Dateipfad-Globbing-Funktion ausgewählt wurde). Dies entspricht „.*“ in vollständigen regulären Ausdrücken.
[abc]Entspricht einem der in den Klammern angegebenen Zeichen.
[a-c]Entspricht einem Zeichen aus dem in den Klammern angegebenen Bereich.
[!abc]Entspricht einem Zeichen, das nicht in der Klammer angegeben ist. Dies entspricht [^abc] in einem vollständigen regulären Ausdruck.
[!a-c]Entspricht einem Zeichen, das nicht im Bereich der Klammern enthalten ist. Dies entspricht [^a-c] in vollständigen regulären Ausdrücken.

Hinweis: Aus historischen Gründen ist ein Backslash (\) in diesem Kontext kein Escape-Zeichen. Um eines der Sonderzeichen zu finden, setzen Sie es in eckige Klammern (zum Beispiel [?]).

Weitere Informationen zur Implementierung finden Sie unter:

Standardmäßig ist der zurückgegebene reguläre Ausdruck vollständig verankert. Mit anderen Worten: Es ist nicht erforderlich, anchoredPattern() erneut auf das Ergebnis anzuwenden. Um einen nicht verankerten regulären Ausdruck zu erhalten, übergeben Sie UnanchoredWildcardConversion in der Konvertierungs 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 diesem Objekt den regulären Ausdruck „ re “ zu und gibt eine Referenz auf das Ergebnis zurück. Dabei werden sowohl das Muster als auch die Musteroptionen kopiert.

Beachten Sie, dass ein per „move“ übertragener regulärer Ausdruck „ QRegularExpression “ nur zerstört oder ihm ein Wert 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 eine Referenz 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 vonQt-Datentypen“.

QDebug operator<<(QDebug debug, QRegularExpression::PatternOptions patternOptions)

Schreibt die Musteroptionen patternOptions zu Debugging-Zwecken in das Debug-Objekt debug.

Siehe auch „Debugging-Techniken“.

QDebug operator<<(QDebug debug, const QRegularExpression &re)

Schreibt den regulären Ausdruck re zu Debugging-Zwecken in das Debug-Objekt debug.

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 dieselbe Musterzeichenfolge und dieselben Musteroptionen haben.

Siehe auch operator!=().

QDataStream &operator>>(QDataStream &in, QRegularExpression &re)

Liest einen regulären Ausdruck aus dem Stream „ in “ in „ re “ ein.

Siehe auch „Serialisierung vonQt-Datentypen“.

© 2026 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.