Regexe in Perl

Ein Sprache wie Perl wäre ohne reguläre Ausdrücke gar nicht vorstellbar [4]. Ein Vergleich geschieht hier mit der Funktion m für den Operator "match", beispielsweise so:

$zeichenkette =~ m/Muster/;

Sofern das Muster auf die Zeichenkette passt, fällt das Ergebnis des Vergleichs positiv aus. Für eine fünfstellige Postleitzahl mit erlaubter Null am Anfang passt das Muster \d{5}, da diese aus fünf beliebigen Ziffern besteht (Listing 5).

Mit Länderkennung für die Schweiz und vier Ziffern lautet das Muster CH-[1-9]\d{3}, wobei die erste Ziffer nur aus dem Bereich 1 bis 9 kommen darf. Die Mengenangabe {3} fordert exakt drei weitere, beliebige Ziffern – sowohl bei weniger als auch bei mehr Ziffern schlägt der Vergleich fehl. Eine Prüfung auf CH-1000 fiele andererseits syntaktisch gültig aus.

Für eine zusätzliche Ortsangabe der Form A-4020 Linz genügt die Ergänzung des bisherigen Musters um ein Leerzeichen ("\s") und alphanumerische Zeichen. Der einfache Ausdruck für eine Adresse in Österreich lautet damit A-\d{4}\s[A-Z][a-z]+. Die Schreibweise [A-Z][a-z]+ stellt dabei sicher, dass der Ortsname aus mindestens zwei Buchstaben besteht und mit einem Großbuchstaben beginnt.

Listing 5

#!/usr/bin/perl -w
my ($muster, $postcode);
$postcode = '01256';
$muster = '\d{5}';
if($postcode =~ m/$muster/)
  {print "PLZ-Format ist korrekt: $postcode\n"}

Matches im Netz

Webdesigner und Grafikspezialisten arbeiten viel mit Farbcodes. Häufig kommt dabei eine hexadezimale Schreibweise zum Einsatz, beispielsweise #ff0000 für Rot in der RGB-Notation. Um diese Angabe automatisiert auf grammatikalische Korrektheit zu prüfen, genügt als Muster der reguläre Ausdruck #[a-f\d]{6}. Auf ein Hash-Zeichen folgen sechs Buchstaben aus dem Bereich a bis f oder die Ziffern 0 bis 9 – alle anderen Zeichen repräsentieren keinen richtigen Farbcode. In der Auswertung bietet sich diese Zeile an, beispielsweise in einem CGI-Skript in Perl (Listing 6).

Listing 6

$muster = '#[a-f\d]{6}';
$farbcode =~ m/$muster/i;

Das unscheinbare i am Ende entspricht der Option -i bei Grep und sorgt auch hier dafür, dass sowohl Groß- als auch Kleinbuchstaben gelten. Das deckt alle Varianten des Farbcodes ab. Auch bei Formularen auf Webseiten empfiehlt es sich, die Nutzereingabe zu validieren. Für E-Mail-Adressen schlägt Jan Goyvaerts [5] folgendes Muster vor:

^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,6}$

Es passt auf die von der ICANN freigegebenen Top Level Domains von bis zu sechs Buchstaben Länge. Vor dem Klammeraffen (@) erwartet der Ausdruck mindestens ein Zeichen aus der Menge der Buchstaben oder Ziffern beziehungsweise einen Unterstrich, ein Prozentzeichen oder ein Plus oder Minus. Der Domainname besteht aus mindestens einem Buchstaben, einer Ziffer, einem Punkt oder einem Bindestrich. Nach dem Punkt als Trennzeichen (\.) folgt die Top-Level-Domain, welche aus minimal zwei und maximal sechs Buchstaben bestehen darf (etwa de, org, info oder travel).

Nutzen Sie den Ausdruck in einem PHP-Skript (Listing 7), so hilft wieder die Ergänzung um das i am Ende. Zeile 5 des Listings gibt die Trefferliste aus, sofern die E-Mail-Adresse der Spezifikation entspricht. Ein solcher Treffer besagt freilich noch nicht, dass es diese Adresse auch tatsächlich gibt. Diese Prüfung muss gesondert erfolgen, etwa mittels einer Auswertung des Fehlercodes bei der Zustellung einer Nachricht.

Listing 7

<?php
$email = "geheim.agent@unterschlupf.de";
$muster = '/^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$/i';
preg_match($muster, $email, $treffer);
print_r($treffer);
?>

LinuxCommunity kaufen

Einzelne Ausgabe
 
Abonnements
 

Ähnliche Artikel

  • Einfaches Erstellen von regulären Ausdrücken
    Wo reguläre Ausdrücke für den Profi ein Denksport sind, steht der Anfänger verzweifelt vor einem Dickicht an Kürzeln und Zeichen. Für den Durchblick sorgt der Editor txt2regex.
  • Zu Befehl
    Auch wenn sich viele Dinge bequem über grafische Oberflächen wie KDE oder GNOME regeln lassen – wer sein Linux-System richtig ausreizen möchte, kommt um die Kommandozeile nicht herum. Abgesehen davon gibt es auch sonst viele Situationen, wo es gut ist, sich im Befehlszeilendschungel ein wenig auszukennen.
  • Teil 3: String-Verarbeitung und Reguläre Ausdrücke
    Die Grundlagen der Zeichenketten haben wir in der letzten Ausgabe gelegt. Diesmal wollen wir uns aber nicht mit einfachen Leer-Tests oder Längenanzeigen begnügen, sondern unsere Strings kräftig durcheinander wirbeln.
  • Suchen und Finden mit Regulären Ausdrücken
    Zum wichtigsten Handwerkszeug bei der Suche in Texten und auf der Festplatte zählen Regular Expressions. Trotz ihrer scheinbar komplexen Struktur lassen sie sich schnell meistern.
  • Zu Befehl: Suchen mit grep, egrep, fgrep, (b)zgrep
    Für die Suche nach Wörtern und Ausdrücken in Textdateien bieten sich die Kommandos der grep-Familie an. Als Ergebnis zeigen sie wahlweise die gefundenen Zeilen, die Namen der Dateien, in denen das Suchmuster vorkommt, oder die Anzahl der Treffer an.
Kommentare

Infos zur Publikation

title_2014_10

Digitale Ausgabe: Preis € 4,95
(inkl. 19% MwSt.)

Mit der Zeitschrift LinuxUser sind Sie als Power-User, Shell-Guru oder Administrator im kleinen Unternehmen monatlich auf dem aktuelle Stand in Sachen Linux und Open Source.

Sie sind sich nicht sicher, ob die Themen Ihnen liegen? Im Probeabo erhalten Sie drei Ausgaben zum reduzierten Preis. Einzelhefte, Abonnements sowie digitale Ausgaben erwerben Sie ganz einfach in unserem Online-Shop.

NEU: DIGITALE AUSGABEN FÜR TABLET & SMARTPHONE

HINWEIS ZU PAYPAL: Die Zahlung ist auch ohne eigenes Paypal-Konto ganz einfach per Kreditkarte oder Lastschrift möglich!       

Tipp der Woche

Schnell Multi-Boot-Medien mit MultiCD erstellen
Schnell Multi-Boot-Medien mit MultiCD erstellen
Tim Schürmann, 24.06.2014 12:40, 0 Kommentare

Wer mehrere nützliche Live-Systeme auf eine DVD brennen möchte, kommt mit den Startmedienerstellern der Distributionen nicht besonders weit: Diese ...

Aktuelle Fragen

Windows 8 startet nur mit externer Festplatte
Anne La, 10.09.2014 17:25, 4 Antworten
Hallo Leute, also, ich bin auf folgendes Problem gestoßen: Ich habe Ubuntu 14.04 auf meiner...
Videoüberwachung mit Zoneminder
Heinz Becker, 10.08.2014 17:57, 0 Antworten
Hallo, ich habe den ZONEMINDER erfolgreich installiert. Das Bild erscheint jedoch nicht,...
internes Wlan und USB-Wlan-Srick
Gerhard Blobner, 04.08.2014 15:20, 2 Antworten
Hallo Linux-Forum: ich bin ein neuer Linux-User (ca. 25 Jahre Windows) und bin von WIN 8 auf Mint...
Server antwortet mit falschem Namen
oin notna, 21.07.2014 19:13, 1 Antworten
Hallo liebe Community, Ich habe mit Apache einen Server aufgesetzt. Soweit, so gut. Im Heimnet...
o2 surfstick software für ubuntu?
daniel soltek, 15.07.2014 18:27, 1 Antworten
hallo zusammen, habe mir einen o2 surfstick huawei bestellt und gerade festgestellt, das der nic...