Muster geltendmachung höhergruppierung

Außerhalb einer Zeichenklasse entspricht ein Punkt im Muster einem beliebigen Zeichen in der Betreffzeichenfolge, mit Ausnahme (standardmäßig) eines Zeichens, das das Ende einer Zeile angibt. Eine beliebige Anzahl von (*PRUNE) Assertionen kann in einem Muster verwendet werden. Betrachten Sie das Problem, eine Zeichenfolge in Klammern zu zuordnen, sodass unbegrenzte verschachtelte Klammern möglich sind. Ohne die Verwendung von Rekursion ist das Beste, was getan werden kann, ein Muster zu verwenden, das bis zu einer festen Tiefe der Verschachtelung übereinstimmt. Es ist nicht möglich, eine beliebige Verschachtelungstiefe zu verarbeiten. Beachten Sie, dass (*COMMIT) am Anfang eines Musters nicht dasselbe ist wie ein Anker, es sei denn, pcRE2s Start-of-Match-Optimierungen sind deaktiviert, wie in dieser Ausgabe von pcre2test gezeigt: Diese speziellen Muster sind in der Regel von der Form (*VERB:arg). Sofern nicht anders angegeben, ist das arg-Argument optional; in einigen Fällen ist es obligatorisch. PCRE2 verfügt über eine Optimierung, die bestimmte einfache Musterkonstrukte automatisch “besitzt”. Beispielsweise wird die Sequenz A+B als A++B behandelt, da es keinen Sinn hat, eine Rückverfolgung in eine Sequenz von A zu verfolgen, wenn B folgen muss. Diese Funktion kann durch die Option PCRE2_NO_AUTOPOSSESS oder das Starten des Musters mit (*NO_AUTO_POSSESS) deaktiviert werden. Selbst in einem Muster, das zur Laufzeit interpoliert und kompiliert wird, werden literale Codeblöcke einmal ig zur perl Kompilierungszeit kompiliert. Im Folgenden wird “ABCD” gedruckt: Wenn ein Muster mit der Option PCRE2_EXTENDED kompiliert wird, werden die meisten Leerzeichen im Muster (außer in einer Zeichenklasse) und Zeichen zwischen einem Zeichenklasse außerhalb einer Zeichenklasse und der nächsten Zeilenumleitung (einschließlich) ignoriert. Ein austretender umgekehrter Schrägstrich kann verwendet werden, um ein Leerzeichen oder ein Zeichen als Teil des Musters einzuschließen.

“Rekursion” bezieht sich in diesem Sinne auf jeden subroutinemäßigen Aufruf von einem Teil des Musters zu einem anderen, unabhängig davon, ob er tatsächlich rekursiv ist oder nicht. Einzelheiten zu Rekursions- und Unterroutinenaufrufen finden Sie in den Abschnitten “Rekursive Muster” und “Gruppen als Unterroutinen”. Null oder mehr eingebettete Musterübereinstimmungsmodifikatoren, die für den Rest des Musters oder den Rest der einschließenden Mustergruppe (falls vorhanden) aktiviert (oder deaktiviert werden, wenn “-” vorangestellt ist). Ein weiterer Fall, in dem keine implizite Verankerung angewendet wird, ist, wenn sich die führende .* innerhalb einer atomaren Gruppe befindet. Wieder einmal kann ein Spiel am Anfang scheitern, wo ein späteres gelingt. Betrachten Sie dieses Muster: Wenn ein Muster eine unbegrenzte Wiederholung innerhalb einer Gruppe enthält, die selbst eine unbegrenzte Anzahl von Malen wiederholt werden kann, ist die Verwendung einer atomaren Gruppe die einzige Möglichkeit, einige fehlerhafte Übereinstimmungen zu vermeiden, die tatsächlich sehr lange dauern. Das Muster Siehe /x für eine andere Möglichkeit, Kommentare in Mustern zu haben. Zusätzlich zur Interaktion mit dem Muster (*SKIP) kann (*MARK:NAME) verwendet werden, um einen Musterzweig zu “beschriften”, sodass das Programm nach dem Abgleich bestimmen kann, welche Verzweigungen des Musters an der Übereinstimmung beteiligt waren. In der Regel wird am Ende eines Musters für reguläre Ausdrücke eine positive Lookahead-Assertion mit einer Breite von null gefunden. Es definiert eine Teilzeichenfolge, die am Ende einer Zeichenfolge gefunden werden muss, damit eine Übereinstimmung auftreten kann, die jedoch nicht in die Übereinstimmung einbezogen werden sollte. Es ist auch nützlich, um übermäßige Rückverfolgung zu verhindern. Sie können eine positive Lookahead-Assertion mit einer Breite von Null verwenden, um sicherzustellen, dass eine bestimmte erfasste Gruppe mit Text beginnt, der mit einer Teilmenge des Musters übereinstimmt, das für diese erfasste Gruppe definiert ist.

Wenn z. B. eine Erfassungsgruppe mit aufeinander folgenden Wortzeichen übereinstimmt, können Sie eine positive Lookahead-Assertion mit einer Breite von null Verwenden verwenden, um zu verlangen, dass das erste Zeichen ein alphabetisches Großbuchstabenzeichen ist.