Hallo Siechfred,
/(?<!ASP) ist toll/ findet also die Zeichenkette " ist toll" sofern davor *nicht* "ASP" steht.
Ja, das Prinzip ist mir schon klar, aber ich verstehe den Sinn von Lookbehind nicht. Das würde man nämlich (in Perl) auch so erreichen: '/(?!ASP) ist toll/'.
Nein, würde man nicht. Beispiel:
#!/usr/bin/env perl
use strict;
use warnings;
my ($text, $match1, $match2);
$text = "Hallo, ASP ist toll!";
$match1 = $text =~ /(?!ASP) ist toll/;
$match2 = $text =~ /(?<!ASP) ist toll/;
print "Match 1: " . $match1 . "\n";
print "Match 2: " . $match2 . "\n";
Ausgabe:
Match 1: 1
Match 2:
Match 1 matcht den String, weil "(?!ASP) is" *immer* matcht. (" is" ist natürlich nicht das gleiche, wie "ASP") - (?!) ist eben eine Look-AHEAD-Assertion. Du brauchst hier aber eine Look-BEHIND-Assertion - was (?<!) eben leistet - deswegen matcht der 2. Ausdruck nichts. Klar?
Wenn ich das Ganze mal teste, funktioniert es:
Ja, weil \b etwas besonderes ist; bei \b ist es Quatsch, das in eine Assertion reinzutun, weil es selbst schon gleichzeitig eine Lookahead/Lookbehind-Assertion ist! (je nach Kontext)
Viele Grüße,
CHristian