Seit der Perl Version 5 gibt es auch die Möglichkeit, bei der Suche nach einem Teilstring auf die nachfolgenden Zeichen vorauszuschauen und davon den Sucherfolg abhängig zu machen; etwa in der Art "Suche den Teilstring 'Regen', aber nur, wenn er nicht von 'wurm' gefolgt wird."
Dazu dienen die Klammerausdrücke "(?=...)
" und "(?!...)
"
Wenn für das Muster vor einer dieser Klammern ein Teilstring gefunden wurde,
wird überprüft, ob sich daran der Ausdruck in der Klammer anschließt;
nur wenn dies der der Fall ist (bei "(?=...)
") bzw. nicht zutrifft
(bei "(?!...)
") gilt die Suche als erfolgreich, sonst wird an einer
anderen Stelle neu gesucht.
#!/usr/local/bin/perl -w $t = "Regenwurm Regenschirm Regenschauer"; if($t =~ /Regen(?!wurm)\w+/) { print "true ($&)\n" } # Test 1 else { print "false\n" } if($t =~ /Regen(?=scha)\w+/) { print "true ($&)\n" } # Test 2 else { print "false\n" } |
Der erste Test sucht nach 'Regen', der aber nicht von 'wurm' gefolgt werden darf;
daher ist die Suche erst bei 'Regenschirm' erfolgreich.
Hierbei ist unbedingt zu beachten, daß der Teilstring, der zu den Ausdrücken
in einer der Klammern "(?=...)
" oder "(?!...)
" i.a. nicht
in den Lösungsvariablen auftaucht; im obigen Beispiel werden die vollständigen
Wörter nur deswegen ausgegebenen, weil 'schirm' und 'schauer' auf das Muster
"\w+
" passen.
Autor: Eike Grote | Letzte Änderung: 02.10.1997 |