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: 03.11.2004 |