Inhalt Perl Einführung: Matching Operator und Substitutionsoperator |
Wie wendet man nun die in Kapitel 6 vorgestellten regulären Ausdrücke an? Um einen regulären Ausdruck mit einer Zeichenkette zu vergleichen, benötigt man zusätzlich noch einen sogenannten Matching Operator: Es handelt sich hierbei um den Operator =~
Stelle Dir vor, Du willst überprüfen, ob in der Zeichenkette $a die Teilzeichenkette marco vorkommt. Wenn die Suche erfolgreich ist, soll "Marco gefunden!" ausgegeben werden sonst "Marco nicht gefunden!". Dies kannst Du wie in folgendem Code Fragment tun:
if ($a=~/marco/) { print "marco gefunden!"; } else { print "marco nicht gefunden!"; }
Mit $a=~/marco/ wird überprüft, ob der reguläre Ausdruck /marco/ auf die Zeichenkette $a paßt. Paßt der reguläre Ausdruck, so wird der Wahrheitswert wahr zurückgegeben andernfalls falsch. So läßt sich der Ausdruck $a=~/marco/ als Bedingung für eine if-Schleife verwenden.
Ein anderer nützlicher Operator ist der Substitutionsoperator, der es erlaubt einen Teil einer Zeichenkette durch eine andere Zeichenkette zu ersetzen. Der Substitutionsoperator hat die folgende Form:
s/regulärer Ausdruck/neue Zeichenkette/
Das ganze funktioniert nun folgendermaßen zusammen mit dem Matchingoperator:
$a =~ s/marco/henning/
Dieser Ausdruck bedeutet folgendes: Wenn auf die Zeichenkette $a der reguläre Ausdruck /marco/ paßt dann ersetze dieses Vorkommnis von marco in der Zeichenkette durch die Zeichenkette henning. Dies geschieht nur für das erste Vorkommnis von marco. Möchte man alle Zeichenketten marco durch die Zeichenkette henning ersetzen, muß man den Substitutionsoperator durch ein g ergänzen:
$a =~ s/marco/henning/g
Das g steht für global, also die gesammte Zeichenkette soll durchsucht und gegebenfalls Ersetzungen vorgenommen werden.
Deine Perlkenntnisse reichen nun vollkommen aus, um die folgende kleine Routine zu schreiben:
Ein Array @zeichenkette soll elementweise durchsucht werden. Wenn in einem Element $element die Zeichenfolge henning gefunden wird, soll sie durch marco ersetzt werden. Schaue Dir noch einmal das Kapitel 5.6 über Kontrollstrukturen an, wenn Dir die foreach-Schleife unbekannt vorkommt. Die Array Definition wird in Kapitel 3.3 erläutert:
@zeichenkette={"henning","henning","henning und marco", "marco"}; foreach $element (@zeichenkette) { $element=~s/henning/marco/g }
Perl Einführung: Matching Operator und Substitutionsoperator Inhalt |