Untergruppen werden durch Klammern getrennt und können verschachtelt werden. Das Markieren eines Teils eines Musters als Untergruppe (Untermuster) bewirkt hauptsächlich zwei Dinge:
Optionale Verzweigungen lokalisieren. Das Muster cat(arcat|erpillar|) entspricht beispielsweise „cat“, „cataract“ und „caterpillar“. Wenn keine Klammern vorhanden sind, entspricht es „cataract“, „erpillar“ und der leeren Zeichenfolge.
Legen Sie die Untergruppe als erfassende Untergruppe fest (oben definiert). Wenn das gesamte Muster übereinstimmt, wird der Teil der Zielzeichenfolge, der mit der Untergruppe übereinstimmt, über den Ovector-Parameter von pcre_exec()() an zurückgegeben Anrufer. Die Reihenfolge, in der die linken Klammern von links nach rechts erscheinen, ist der Index der entsprechenden Untergruppe (beginnend bei 1). Die Ergebnisse der Erfassungsuntermuster-Übereinstimmung können über diese Indexnummern erhalten werden.
Wenn beispielsweise die Zeichenfolge „der rote König“ mithilfe des Musters ((rot|weiß) (König|Königin)) abgeglichen wird, lautet das Mustervergleichsergebnis array("roter König", "roter König " , "red", "king"), wobei das 0. Element das Ergebnis des gesamten Mustervergleichs ist und die folgenden drei Elemente die Ergebnisse der drei Untergruppenübereinstimmungen sind. Die folgenden Tabellen lauten 1, 2 und 3.
Tatsächlich sind die beiden durch Klammern ausgeführten Funktionen nicht immer nützlich. Oft besteht die Notwendigkeit, Untergruppen zur Gruppierung zu verwenden, diese aber nicht (einzeln) zu erfassen. Das Befolgen der Zeichenfolge „?:“ unmittelbar nach der linken Klammer der Untergruppendefinition verhindert, dass die Untergruppe separat erfasst wird, und hat keinen Einfluss auf die Berechnung der nachfolgenden Untergruppen-Seriennummer. Wenn beispielsweise die Zeichenfolge „die weiße Königin“ mit dem Muster ((?:rot|weiß) (König|Königin)) übereinstimmt, lautet das übereinstimmende Ergebnis array(„weiße Königin“, „weiße Königin“, „weiße Königin“ ), die beiden Untergruppen von und König|Königin. Die maximale Anzahl erfasster Untergruppen beträgt 99 und die maximale Anzahl aller zulässigen Untergruppen (einschließlich erfasster und nicht erfasster) beträgt 200.
Wenn Sie die Option zur Vereinfachung der Abkürzung am Anfang der nicht erfassenden Untergruppe festlegen müssen, kann der Optionsbuchstabe zwischen ? und: stehen, zum Beispiel:
(?i:saturday|sunday) (?:(?i)saturday|sunday)
Die beiden oben genannten Schreibweisen sind tatsächlich dasselbe Muster. Da die optionalen Zweige jeden Zweig von links nach rechts ausprobieren und die Optionen nicht vor dem Ende des Untermodus zurückgesetzt werden und weil sich die Einstellung der Optionen auf andere nachfolgende Zweige auswirkt, stimmt das obige Muster überein. „SONNTAG“ und „ Samstag".
In PHP 4.3.3 können Sie Untergruppen mithilfe der (?P
Manchmal sind mehrere Übereinstimmungen erforderlich und Untergruppen können in einem regulären Ausdruck ausgewählt werden. Damit mehrere Untergruppen ein Problem mit der Rückreferenznummer teilen können, ermöglicht die (?|-Syntax das Kopieren der Nummer. Betrachten Sie den folgenden regulären Ausdruck, der mit Sonntag übereinstimmt:
(?:(Sat)ur|(Sun))day
Hier, wenn Rückreferenz 1 leer ist, wird Sun in Rückreferenz gespeichert 2. Wenn Rückreferenz 2 nicht vorhanden ist, wird Sat in Rückreferenz 1 gespeichert. Verwenden Sie das Änderungsmuster (?|, um dieses Problem zu beheben:
(?|(Sat)ur|(Sun))day
Verwenden Sie dieses Muster. Sowohl Sonne als auch Sat werden in Rückreferenz 1 gespeichert