
zeigt Ihnen wie es geht.
Perl besitzt eine sehr mächtige Text-Such- und Ersetzen-Funktion. Eine dieser Funktionen ist das Matching, auf Deutsch die Suche innerhalb eines Strings, die andere die Substitution. Letztere ersetzt das gesuchte Muster durch die entprechenden Vorgaben. Die Muster werden zwischen zwei Zeichen definiert.
=~ definiert Bearbeitung laut Muster, != das gegenteilige Muster
Meist sind es die Schrägstriche: /Muster/,
Es funktioniert aber auch mit anderen Zeichen; z.B.: ##,(),{}...... Diese werden
meist zwecks Lesbarkeit des Codes verwendet.
Achtung: Das Muster wird zwischen den Zeichen gesucht.
Diese werden in Perl nach dem letzten Schrägstrich bekanntgegeben; z.B.: m/Muster/i
Der Backslash \ wandelt Nichtliterale in Literale um; z.B. \" wenn das Zeichen "
Alternative Ausdrücke können auch in Klammern zusammengefasst werden. /(azDe|A)/ In diesem Fall können eine oder mehrere Zeichenpositionen alternieren!!
Zum Beispiel kann ein Wort durch ein _ oder mehrere _ getrennt sein. (Ein_Wort,Ein_
_Wort, Ein_ _ _ _ _ _ _ _ _ _Wort).
Dafür gibt es folgende Abfragemöglichkeiten:
Normalerweise liefert Perl als Rückgabe den linken längsten String
z.B.:*
z.B.: abrakadabra a bis b: abrakadab. Folgt daran anschließend ein ?
z.B. *?, ist dasErgebnis die Rückgabe des linken kürzesten String z.B.:
abrakadabra a bis b: ab
$t = "12 34 56 78"; $t =~ m/(\d+)/g; print "1:".$1."\n"; $t =~ m/(\d+)/g; print "2:".$1."\n"; $t =~ m/(\d+)/g; print "3:".$1."\n";; $t =~ m/(\d+)/g; print "4:".$1; |
Der Bildschirm enthält dann folgende Ausgaben:
Natürlich wird dies in einer Schleife erledigt. Jener Ausdruck, der ein
Ergebnis bei erfolgreicher Suche zurückliefern soll, wird durch zwei runde
Klammern begrenzt. Man kann mehrere Klammern verschachtelt und nebeneinander
setzen. Perl legt die Ergebnisse links beginnend einfach in die nächste
Variable ab. Diese Variablen werden standardgemäß einfach durchnummeriert:
$1, $2, $3..... ;
z.B.: /(Ausdruck1)Ausdruck(Ausdruck2)/, Ergebnis in
$1 und $2.
Dieses Verhalten kann durch ?: in der Klammer unterbunden werden z.B. (?:Ausdruck1). Es wird dieses Ergebnis in ein und derselben Variable abgelegt.
Innerhalb des Musters kann durch \1 statt $1 auf das Ergebnis des Klammerausdruckes
referenziert werden.
Beispiel: /(a)\1/ doppeltes Vorkommen des Zeichen a.
Beispiel: /(\b(\w+)\s+\1\b)\1/ doppeltes Vorkommen eines Wortes.
Beispiel: /(^(\w+):\s+(.*)/ mailheader $1=Parameter $2=Inhalt
Alle Suchergebnisse erhält man innerhalb einer Liste. Auf diese kann man, wie jedes andere Array auch ensprechend zugreifen:
$t = "12 34 56 78"; print (($t =~ m/(\d+)/g)[2]); |
Der Bildschirm enthält dann folgende Ausgabe:
Zum Testen der regulären Ausdrücke habe ich ein kleines Perlprogramm geschrieben. Es nimmt einen String per Eingabe, legt per Eingabe den regulären Ausdruck für das Matching fest und liefert das Ergebnis. Diese win-version bei vorhandenem Perl-Interpreter über DOS die Datei regular.pl starten, viel Spaß: download regTest.zip(2Kb)