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 |