Webbasierte Adressdatenbank
Reguläre Ausdrücke
Pattern Matching
Ein sehr mächtiges Werkzeug unter Perl ist das Pattern Matching (oder auch Reguläre Ausdrücke = Regex).
Damit ist es möglich sehr komplexe "suchen" oder "suchen und ersetzten" Operationen
durchzufüren. Das "Suchen" ermöglicht der m//
Operator, das
"Suchen und Ersetzten" der s///
Operator. Die Slashes bezeichnet man hier als
Quotingzeichen. Diese können auch durch andere Zeichen ersetzt werden. Verwendet man Slashes als Quoting Zeichen,
kann der m//
Operator auch als //
geschrieben
werden. Die Matchingopeartionen können verschiedene Modifier besitzen, von denen einige die Interpretation
des regulären Ausdrucks beinflussen:
Konstrukt | Klasse | negiertes Konstrukt | negierte Klasse |
---|---|---|---|
\d (Ziffer) | [0-9] | \D (keine Ziffer) | [^0-9] |
\w (Wortzeichen) | [a-zA-Z0-9_] | \W (kein Wortzeichen) | [^a-zA-Z0-9_] |
\s (Whitespace) | [ \r\t\n\f] | \S (kein Whitespace) | [^ \r\t\n\f] |
Diese abgekürzten Formen können auch in anderen Zeichenklassen verwendet werden:
[\da-fA-F]
erkennt eine hexadezimale Ziffer. Des weiteren gibt es
andere Zeichen die erkannt werden können, aber sich nicht ohne weiteres als Klasse
definieren lassen und deshalb als Ankerpunkte bezeichnet werden:
Konstrukt | Bedeutung |
---|---|
\b | Wortgrenze, zwischen \w und \W |
\B | keine Wortgrenze |
^ | Prüft auf den Anfang eines Strings (der Zeile, wenn mit /m gearbeitet wird) |
$ | Prüft auf Ende des Strings (der Zeile, wenn mit /m gearbeitet wird) |
\A | Prüft auf den Anfang des Strings |
\Z | Prüft auf Ende des Strings |
(?=...) | Prüft ob ... als nächstes erkannt werden würde |
(!...) | Prüft ob ... als nächstes nicht erkannt werden würde |
Bei $
und \Z
können die Treffer nicht nur am Ende der Zeile,
sondern auch ein Zeichen früher erkannt werden, wenn es sich bei diesem Zeichen um einen Zeilenvorschub handelt.
Muster gruppieren
Als Sequenz bezeichnet man eine Abfolge von Mustern, also so etwas wie: /abc/
, was bedeutet
ein a gefolgt von einem b, gefolgt von einem c. Die wahre Stärke eines Regex kommt erst zum Tragen, wenn man
etwas ausdrücken will, wie eins oder mehr davon. Dazu verwendet man sogenannte Multiplikatoren:
Maximal | Minimal | Bedeutung |
---|---|---|
{n,m} | {n,m}? | Muß mindestens n, aber nicht mehr als m Mal vorkommen |
{n,} | {n,}? | Muß mindestens n Mal vorkommen |
{n} | {n}? | Muß genau n Mal vorkommen |
* | *? | Muß null oder mehr Mal vorkommen (entspricht {0,} ) |
+ | +? | Muß ein oder mehr Mal vorkommen (entspricht {1,} ) |
? | ?? | Muß kein- oder einmal vorkommen (entspricht {0,1} ) |
Die Multiplikatoren sind gierig (greedy), d. h. hat ein Multiplikator die Möglichkeit zwischen vier und zehn
Zeichen zu erkennen, wird er sich immer für die zehn Zeichen entscheiden. wird ein ?
nachgestellt, wird der Multiplikator nur minmal matchen, d. h. die vier Zeichen erkennen.
Alternativen
Wenn man nach Alternativen sucht, als so etwas wie "dieses oder jenes", verwendet man folgendes Konstrukt:
/blau|rot/
. Hier wird nach "blau" oder "rot" gesucht. Das ganze ist
natürlich auf mehr als zwei Alternativen ausdehnbar.
Klammern als Zwischenspeicher
Der Gruppierungsvorrang, also die Reihenfolge in der abgearbeitet wird läßt sich am besten mit nachfolgender
Tabelle verdeutlichen, wobei der Vorang von links nach rechts und von oben nach unten abnimmt:
Vorrang
Der Gruppierungsvorrang, also die Reihenfolge in der abgearbeitet wird läßt sich am besten mit nachfolgender
Tabelle verdeutlichen, wobei der Vorang von links nach rechts und von oben nach unten abnimmt:
Name | Darstellung |
---|---|
Klammern | ( ) (?: ) |
Multiplikatoren | ? + * {n,m} ?? +? *? |
Sequenzen und Anker | abc ^ $ \A \Z (?= ) (?! ) |
Alternativen | | |
Literaturhinweise:
- Perl-Online-Dokumentation von Eike Grote
- perldoc perlre
- Reguläre Ausdrücke
Jeffrey E. F. Friedl
ISBN 3-936073-62-2
O'Reilly
Zurück zum Anfang dieses Projekts.