Perl Programmierung - Grundkurs
erfolgreichen Mustervergleichs, diese Position wird mit der Funktion pos erfragt
Alternativen angeben
Mit dem Muster
/hallo|Hallo/
kann nach beiden Worten gesucht werden. Die Suche gilt als erfolgreich, wenn eines der beiden Worte gefunden wird.
Angaben negieren
Der nächste Ausdruck beschreibt alles ausser einem kleinen Buchstaben:
/[^a-z]/
Das Karet ändert seine Bedeutung, wenn es am Anfang eines Ausdrucks in eckigen Klammern steht.
Anwendungsbeispiel:
exit 1 if =~ /^[JjyY]/;
oder
exit 1 if =~ /^[JY]/i;
im zweiten Beispiel wird duch das Anhängen des i die Gross- und kleinschreibung ignoriert
Tabelle der allgemeinen Modifizierer für reguläre Ausdrücke
Option
Beschreibung
i
Gross- und Kleinschreibung beim Mustervergleich nicht unterscheiden
m
Betrachtet den String als Folge von Zeilen. Die Zeichen ^ und $ bekommen eine etwas andere Bedeutung: Statt auf Anfang und Ende des Strings passen sie allgemein auf Zeilenenden, auch wenn diese mitten im String sind.
s
Betrachtet des String als eine Zeile. Entspricht der Standardeinstellung bis auf eine Ausnahme: Der Punkt . passt auch auf ein Zeilenende, was normalerweise nicht der Fall ist.
ms
Mischung aus m und s
x
Erweiterte reguläre Muster
Suchen und Ersetzen
Zum Suchen verwendet man den Operator m und zm Ersetzen s.
Mit der Option g wird nach allen Fundstellen im Text gesucht. Ohne die Angabe von g hört die Suche nach der ersten Fundstelle auf.
/hallo/gi
Ignoriert Gross- und Kleinschreibung und sucht nach allen Fundstellen.
Mit dem Operator s für substitute geschieht das Ersetzen. Es müssen zwei Dinge angegeben werden.
Was zu ersetzen ist und wodurch.
Im Beispiel soll Das durch Dies ersetzt werden:
my $zeile = "Das ist ein Text";
$zeile =~ s/Das/Dies/;
Mit der folgenden Anweisung hängen Sie ein Semikolon an das Ende der Zeile:
$v =~ s/$/;/;
Auch für das Ersetzen kann g als Option eingesetzt werden, um alles zu ersetzten.
$text = s/ä/ae/g; Alle ä durch ae ersetzen
Übungen
Übung 1 : Mustervergleich
Welche Zeichenfolgen erkennt der angegebene reguläre Ausdruck? Das heißt, welche Zeichenfolgen enthalten ein passendes Muster?
Muster
1
2
3
4
5
aus
Haus
Aus
laust
auseinander
a us
aus+
Hau
auss
aUss
Hausseingang
ausau
aus*
Hau
auss
aUss
Hausseingang
a
a*
aaa
xyz
xax
ABC
bab
\baus
aus
Haus
auss
Hausseingang
aUss
[Tim|Tom|Tam]
Tim
|
zom
mat
TOm
Lösung:
Am schwierigsten ist es wohl, daran zu denken, dass ein * für eine beliebige Wiederholung steht - also auch für gar keine Wiederholung, oder verständlicher ausgedrückt:
Übung 2: Texte umbauen
Formulieren Sie Anweisungen mit dem Operator s , die einen Text wie angegeben umformen. Nehmen Sie dazu an, Sie hätten bereits eine Schleife programmiert, so dass in der Variablen $zeile eine Textzeile enthalten ist.
1.) Jede Zeile wird um ein Hash-Zeichen (einen Gartenzaun) # am Zeilenanfang erweitert.
2.) Jede Zeile wird mit einem Strichpunkt abgeschlossen.
3.) Ersetzen Sie alle doppelten Wörter, die unmittelbar in einer Zeile nacheinander folgen, durch ein einziges Exemplar. Aus Hallo Hallo Hallo ihr! " soll Hallo ihr! " werden.
4.) Jede Zeile bekommt einen führenden Gartenzaun und einen Strichpunkt an das Ende, aber nur, falls das letzte Zeichen der Zeile ein Ausrufezeichen ist. Aus den beiden Zeilen
Meine Zeile!
Noch eine Zeile
soll Folgendes werden:
#Meine Zeile!;
Noch eine Zeile
Lösung zu 2: Texte umbauen
Jede Zeile bekommt einen führenden Gartenzaun und einen Strichpunkt an das Ende, falls das letzte Zeichen der Zeile ein Ausrufezeichen ist.
}#!/usr/bin/perl -w
use strict;
while(my $zeile = <>) {
$zeile =~ s/^(.*!)$/#$1;/;
print $zeile;
Ersetzen Sie alle doppelten Wörter in einer Zeile durch ein einziges Exemplar.
#!/usr/bin/perl -w
use strict;
while(
my $zeile = <>) {
$zeile =~ s/\b(\w+)(\s+\1)+/$1/;
print $zeile;
}
HTML-Dateien updaten
Im folgenden sollen alle HTML-Dateien in einem benutzerdefinierten Verzeichnis im Datumsfeld aktualisiert werden.
In der letzten Zeile des HTML-Dokuments steht jeweils:
letzte Änderung: 05.03.2003
diese Zeile soll in jeder Datei aktualisiert werden auf das heutige
Weitere Kostenlose Bücher