Einführung in Regular Expressions

0 | 34898 Aufrufe
Sie können diese Wikiseite nach der Anmeldung auf Webmasterpro bearbeiten. Helfen Sie mit und verbessern Sie "Einführung in Regular Expressions" mit Ihrem Wissen!

Anzeige Hier werben

Regex (eine Abkürzung für regular expression, auf deutsch Regulärer Ausdruck) sind eine Art Filterkriterium, mit deren Hilfe man Zeichenketten analysieren und manipulieren kann. Sie sind in einer Vielzahl von Programmiersprachen (sed, awk, Perl, PHP,...) und Programmen (Editor vi, HTML-Editoren, OpenOffice,..) verfügbar. Manchmal werden Sie auch Pattern (Muster) genannt.

Achtung: In der theoretischen Informatik hat der Begriff "Regulärer Ausdruck" eine exakt definierte, sehr eingeschränkte Bedeutung. Ein regulärer Ausdruck aus der Informatik kann fast nix, eine Regex in Perl oder PHP kann viel mehr. Nicht verwechseln! Besonders nicht bei der Prüfung!

Die zwei typische Anwendungen von Regexen sind das Suchen und das Ersetzen.

Suchen - Pattern Matching

Ich habe eine Variable mit viel Text, z.B. $text = "das kostet 7 Euro" und will rausfinden ob da ein Geldbetrag drin ist. Zwei Schreibweisen dafür aus zwei Programmiersprachen. Zuerst in Perl:

 
Perl
1
2
3
if( $text =~ m/\d+ Euro/ ) {
    print "ja, hier gibt es geld!";
}

Dann in PHP:

 
PHP
1
2
3
if ( preg_match( "/\d+ Euro/", $text ) ) {
    echo "ja, hier gibt es geld!";
}

in Python:

 
Python
1
2
3
import re
if re.search('\d+ Euro', text): 
    print "ja, hier gibt es geld!"

Wie man sieht wird in beiden Sprachen der Pattern selbst gleich geschreiben : \d+ Euro Nur das Drumherum ist anders. \d steht für eine Ziffer (also 0 oder 1 oder 2 .... oder 9). Das Plus dahinter bedeutet: ein oder mehrmals. Der rest des Patterns ist einfach wörtlich zu nehmen.

Auf deutsch übersetzt bedeuten die beiden Programme also:

Gibt es in der Variablen $text irgendwo eine oder mehrere Ziffern, gefolgt von einem Leerzeichen, gefogt von dem Wort Euro? Falls ja, dann gib den Text aus "ja, hier gibt es geld!".

Ein paar Beispiele für $text:

  • $text = "999 Euro sind viel Geld"; # das matcht.
  • $text = "999euro sind gleich viel geld"; # das matcht aus zwei gründen nicht: leerzeichen fehlt und kleines e
  • $text = "2,5 Euro"; # das matcht nicht, weil das komma stört
  • $text = "2 Euro und 50 cent"; # das matcht, ignoriert aber die cent!

Dieses Beispiel könnte man jetzt weiter entwickeln: Kommazahlen auch erkennen, den Betrag in einer Variable speichern, u.s.w. Aber zuerst die andere Anwendungsart von Regexen:

Suchen und Ersetzen - substitution

Ich habe eine Varible mit viel Text, z.B: $text = "die coolste Entwicklung des Jahres ist Second Life. Ohne Second Life ist kein Firmenauftritt mehr vorstellbar. In der Zukunft wird auch in der Bildung immer mehr Second Life eingesetzt werden" In diesem Text will ich nun eine Ersetzung vornehmen.

Zwei Schreibweisen dafür aus zwei Programmiersprachen. Zuerst in Perl:

 
Perl
1
$text =~ s/Second Life/Facebook/g;

Dann in PHP:

 
PHP
1
$text = preg_replace("/Second Life/", "Facebook", $text);

in Python:

 
Python
1
2
import re
re.sub("Second Life", "Facebook", s)

Bei diesem einfachen Beispiel hätte man (in PHP) auch mit str_replace arbeiten können. Richtig toll wird die Sache wenn man einen komplizierten Pattern hat der ersetzt wird.

Texte, Zahlen, Klassen

Die einfachsten Pattern bestehen genau aus den Zeichen die gesucht werden. Wenn man ein A suchen will benutzt man den Pattern /A/. Wenn man eine 1 suchen will benutzt man den Pattern /1/.

Dann gibt es ein paar praktische Abkürzungen:

  • \d eine Ziffer, also 1 oder 2 oder .... 9
  • \D keine Ziffer, also jedes andere zeichen ausser 1 oder 2 oder .... 9
  • \w Ein Wort-Zeichen, das sind kleine + grosse Buchstaben, Ziffern und der Unterstrich_
  • \W kein Wort-Zeichen
  • \s Ein Leerzeichen oder Tabulator
  • \S kein Leerzeichen oder Tabulator, also fast alle zeichen

Achtung: diese Abkürzungen matchen jeweils ein Zeichen. Wenn es mehrere sein sollen schreibe ich mehrere an:

/\d\d\d/ sucht eine dreistellige zahl (irgendwo im string)

Anfang und Ende

^ Anfang

$ Ende

Beispiel: ^Wort$

Wiederholungen: Quantoren

Mit den folgenden sog. Quantoren, gibt man an, wie oft sich ein bestimmtes Ausdruck wiederholen darf.

Sie werden hinter einen Ausdruck geschrieben und geben dann an, wie oft dieser vorkommen darf:

  • ? : null- oder einmal , d.h. der Ausdruck ist optional
  • + : mindestens einmal
  • * : beliebig oft (auch keinmal)
  • {n} : genau n-mal
  • {min,max} : mindestens min-mal und maximal max-mal
  • {min,} : mindestens min-mal
  • {,max} : maximal max-mal

Beispiel: x?html passt auf html und xhtml


Wikiseite bearbeiten

Diese Seite kann von jedem registrierten Benutzer bearbeitet werden. Bisher haben 3 Personen an der Seite "Einführung in Regular Expressions" mitgewirkt.

Sie haben einen Fehler entdeckt oder möchten etwas ergänzen? Dann können Sie nach der Anmeldung "Einführung in Regular Expressions" hier bearbeiten.

Mitarbeiter
  • arbeitet seit längerem als Webdesigner und vor allem -entwickler. Er ist Webmaster von Webmasterpro.de und leitet den Flashcounter-Service.
  • hat keine Beschreibung angegeben. Eine Beschreibung kann man unter dem Punkt "Profil bearbeiten" im Kontrollzentrum eintragen.
  • aus Wien arbeitet als Web-Entwickler, betreibt die Seite www.b23.at und glaubt noch an den Weltfrieden.