Der Regex-Operand mit einfangenden Klammern
(Auszug aus "Reguläre Ausdrücke" von Jeffrey E. F. Friedl)
Wenn im Match-Operanden einfangende Klammern benutzt werden, zeigt sich split von einer ganz anderen Seite. Die Liste der zurückgegebenen Bruchstücke umfasst in diesem Fall auch noch den von den Klammern eingefangenen Text zwischen den eigentlichen Bruchstücken. Also wird hier Text, der normalerweise von split gestrichen wird, dennoch zurückgegeben.
Ein Beispiel aus der Verarbeitung von HTML-Daten: split(/(<[^>]*>)/) verwandelt
...●und●<B>sehr●<FONT●color=red>sehr</FONT>●viel</B>●Mühe...
in
( '...●und●', '<B>', 'sehr●', '<FONT●color=red>', 'sehr', '</FONT>', '●viel', '</B>', '●Mühe...')
Ohne die einfangenden Klammern gibt split(/<[^>]*>/) die folgenden Elemente zurück:
( '...●und●', 'sehr●', 'sehr', '●viel', '●Mühe...' )
Diese zusätzlichen Elemente zählen nicht für die Maximalanzahl von Elementen, die der Limit-Operand begrenzt. (Der Limit-Operand bezieht sich auf die Anzahl der Stücke, in die der Suchstring aufgeteilt wird, nicht auf die Anzahl der zurückgegebenen Listenelemente.)
Wenn mehrere Klammerpaare vorhanden sind, wird für jedes ein zusätzliches Element zurückgegeben. Wenn ein Klammerpaar keinen Anteil am Treffer hat und daher keinen Text einfängt, wird trotzdem ein Element mit dem undefinierten Wert erzeugt.
<< zurück | vor >> |
Tipp der data2type-Redaktion: Zum Thema Reguläre Ausdrücke bieten wir auch folgende Schulungen zur Vertiefung und professionellen Fortbildung an: |
Copyright der deutschen Ausgabe © 2008 by O’Reilly Verlag GmbH & Co. KG
Für Ihren privaten Gebrauch dürfen Sie die Online-Version ausdrucken.
Ansonsten unterliegt dieses Kapitel aus dem Buch "Reguläre Ausdrücke" denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.
O’Reilly Verlag GmbH & Co. KG, Balthasarstr. 81, 50670 Köln