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:

Zurück zum Anfang dieses Projekts.