PHP – PCRE-Untergruppe für reguläre Ausdrücke (Untermuster)

伊谢尔伦
Freigeben: 2016-11-21 17:19:54
Original
1414 Leute haben es durchsucht

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)
Nach dem Login kopieren

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 (?Ppattern)-Syntax benennen. Dieses Untermuster erscheint in den Abgleichsergebnissen sowohl mit seinem Namen als auch mit seiner Reihenfolge (numerischer Index). PHP 5.2.2 fügt zwei weitere Syntaxen für die Benennung von Untermustern hinzu: (?muster) und (? 'name'muster).

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
Nach dem Login kopieren

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
Nach dem Login kopieren

Verwenden Sie dieses Muster. Sowohl Sonne als auch Sat werden in Rückreferenz 1 gespeichert


.
Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!