Vorausschauende Suche

[ <= ] [ PERL ] [ SUMMARY ] [ => ]

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. Test 2 findet erst in 'Regenschauer' einen passenden Substring für 'Regen' gefolgt von 'scha'.

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.


[ <= ] [ PERL ] [ SUMMARY ] [ => ]

Autor: Eike Grote Letzte Änderung: 02.10.1997