Perls Regex-Dialekt
(Auszug aus "Reguläre Ausdrücke" von Jeffrey E. F. Friedl)
Die nächste Tabelle fasst den Regex-Dialekt von Perl zusammen. Vor Jahren war Perl die einzige Sprache, die derart viele Metazeichen unterstützte, aber in der Zwischenzeit haben die anderen Sprachen aufgeholt und viele von Perls Features implementiert. Diese üblichen, in mehreren Sprachen vorhandenen Metazeichen wurden in der Übersicht unter Features und Dialekte behandelt, in diesem Kapitel werden zu manchen von ihnen Perl-spezifische Eigenheiten behandelt. (In der folgenden Tabelle wird darauf verwiesen.)
Tabelle: Elemente von regulären Ausdrücken in Perl – Übersicht.
Abkürzungen für Zeichen (1) | ||
---|---|---|
siehe Zeichendarstellung | (K) | \a [\b] \e \f \n \r \t \oktal \xhex \x{hex} \cZeichen |
Zeichenklassen und ähnliche Konstrukte | ||
siehe Zeichenklassen und ähnliche Konstrukte | Klassen: [...] [^...] (dürfen POSIX-Klammerausdrücke wie [:alpha:] enthalten; siehe POSIX-Klammerausdruck »Zeichenklasse«: [[:alpha:]]) | |
siehe Fast jedes Zeichen: Punkt | Jedes Zeichen außer dem Newline: Punkt (mit /s: jedes Zeichen) | |
siehe Unicode-Sequenz für kombinierende Zeichen: \X | Unicode-Zeichen mit beliebigen kombinierenden Zeichen: \X | |
siehe Genau ein Byte | Erzwungenes Matching eines einzelnen Bytes (Vorsicht!): \C | |
siehe Abkürzungen für Zeichenklassen: \w, \d, \s, \W, \D, \S | (K) | Abkürzungen für Zeichenklassen: (2) \w \d \s \W \D \S |
siehe Unicode-Eigenschaften, Schriftsysteme (Scripts) und Blockbereiche: \p{Prop}, \P{Prop} | (K) | Unicode-Eigenschaften, -Scripts und -Blockbereiche: (3) \p{Prop} \P{Prop} |
Anker und andere Zusicherungen der Länge null | ||
siehe Zeilenanfang, Stringanfang: ^, \A | Anfang der Zeile oder des Strings: ^ \A | |
siehe Zeilenende, Stringende: $, \Z, \z | Ende der Zeile oder des Strings: $ \z \Z | |
siehe Gebrauch von ˹\G˼ | Ende des letzten Treffers: \G | |
siehe Wortgrenzen: \b, \B, \<, \>, ... | Wortgrenze: (4) \b \B | |
siehe Lookahead; Lookbehind | Lookaround: (5) (?=...) (?!...) (?<=...) (?<!...) | |
Kommentare und Modus-Modifikatoren | ||
siehe Modus-Modifikatoren: (?Modifikator), z.B. (?i) und (?-i) | Modus-Modifikatoren: (6) (?mod-mod) Erlaubte Modifikatoren: x s m i (siehe Regex-Modifikatoren) | |
siehe Modus-Modifikatoren mit Klammerung: (?Modifikator:...), z.B. (?i:...) | Bereich für Modus-Modifikatoren: (?mod-mod:...) | |
siehe Kommentare: (?#...) und #... | Kommentare: (?#...) #... (vom ›#‹ bis zum nächsten Newline oder bis zum Ende der Regex) | |
Gruppieren, Einfangen von Text, Bedingungen, Perl-Code in der Regex | ||
siehe Gruppierende und einfangende Klammern: (...), \1, \2, ... | Einfangende Klammern: (...) \1 \2 ... | |
siehe Nur gruppierende (nicht-einfangende) Klammern: (?:...) | Nur gruppierende Klammern: (?:...) | |
siehe Atomare Klammern | Atomare Gruppen: (?>...) | |
siehe Alternation | Alternation: | | |
siehe Bedingte reguläre Ausdrücke | Bedingte reguläre Ausdrücke: (? if then|else) – »if« kann Code, Lookaround oder (Num) sein | |
siehe Gierige Quantoren | Gierige Quantoren: * + ? {n} {n,} {x,y} | |
siehe Nicht-gierige, »genügsame« Quantoren | Nicht-gierige (genügsame) Quantoren: *? +? ?? {n}? {n,}? {x,y}? | |
siehe Das Perl-Codemuster-Konstrukt | Perl-Codemuster: (?{...}) | |
siehe Das dynamische Regex-Konstrukt | Dynamische reguläre Ausdrücke: (??{...}) | |
Nur in Regex-Literalen | ||
siehe Interpolation von Variablen | (K) | Interpolation von Variablen: $name @name |
siehe Nächstes Zeichen in Klein- oder Großbuchstaben verwandeln | (K) | Nächstes Zeichen in Klein- oder Großbuchstaben verwandeln: \l \u |
siehe Bereiche in Klein- oder Großbuchstaben verwandeln | (K) | Bereiche in Klein- oder Großbuchstaben verwandeln: \L \U ... \E |
siehe Bereich als literalen String interpretieren | (K) | Bereich als literalen String interpretieren: \Q ... \E |
siehe Namen für Unicode-Zeichen | (K) | Namen für Unicode-Zeichen: \N{name} – optional, vgl. Namen für Unicode-Zeichen |
(K) - kann auch in einer Zeichenklasse verwendet werden | (1)...(6) siehe Text |
Ein paar Anmerkungen zu der Tabelle:
(1)
˹\b˼ ist nur in Zeichenklassen ein Backspace, sonst eine Wortgrenze.
Oktale Escapes können zwei- und dreistellig sein.
Die ˹\xhex˼-Sequenz akzeptiert zweistellige Hexadezimalzahlen (sie akzeptiert auch einstellige, gibt dann aber eine Warnung aus, wenn Warnungen aktiviert sind). Bei der ˹\x{hex}˼-Sequenz können Hexadezimalzahlen beliebiger Länge angegeben werden.
(2)
˹\w˼, ˹\d˼ und ˹\s˼ haben vollen Unicode-Support.
˹\s˼ erkennt das ASCII-Zeichen Vertical Tab nicht (siehe bei Zeichendarstellung).
(3)
Perl unterstützt Unicode Version 4.1.0.
Unicode-Schriftsysteme (Scripts) werden unterstützt. Die Namen der Unicode-Eigenschaften und -Schriftsysteme dürfen ein vorangestelltes ›Is‹ haben, das ist aber optional (siehe Schriftsysteme). Unicode-Blockbereiche dürfen ein vorangestelltes ›In‹ haben. Wenn es ein Schriftsystem gleichen Namens gibt, ist das ›In‹ obligatorisch.
Die Zusammensetzung ˹\p{L&}˼ wird unterstützt, außerdem auch ˹\p{Any}˼, ˹\p{All}˼, ˹\p{Assigned}˼ und ˹\p{Unassigned}˼.
Die ausgeschriebenen Namen der Unicode-Eigenschaften wie ˹\p{Letter}˼ werden unterstützt. Namen dürfen Leerzeichen, Unterstriche oder gar nichts zwischen den Namensbestandteilen haben ˹(\p{Lowercase_Letter}˼ darf auch wie ˹\p{LowercaseLetter}˼ oder ˹\p{Lowercase●Letter}˼ geschrieben werden). Ich empfehle dennoch die Verwendung der langen Namen aus der Tabelle Grundlegende Unter-Eigenschaften in Unicode.
˹\p{^...}˼ ist dasselbe wie ˹\P{...}˼.
(4)
Die Wortgrenzen funktionieren auch mit Unicode-Zeichen.
(5)
Die Lookaround-Konstrukte dürfen einfangende Klammern enthalten.
Lookbehind wird nur für Unterausdrücke unterstützt, die Strings fester Länge erkennen.
(6)
Der Modifikator /x kümmert sich nur um ASCII-Whitespace. Auch der Modifikator /m beeinflusst nur Newlines, nicht die ganze Palette der Unicode-Zeilenendezeichen.
Der Modifikator /i funktioniert auch mit Unicode-Zeichen.
Nicht alle Metazeichen sind vor der Regex-Maschine gleich. Manche dieser »Regex-Metazeichen« werden gar nicht von der Regex-Maschine verarbeitet. Es sind eher String-Metazeichen, die Perl interpretiert, bevor es sie als Literale an die Regex-Maschine weitergibt.
<< 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