Tom: Regular Expressions, negative lookbehind assertion

Beitrag lesen

Hello Christian,

$pattern = '#<(a|area)\s[^>]*href=("|')?(?<!javascript:)(.*)\2.*>#Ui';

Du hast eine Lookbehind-Assertion, Du willst aber eine Lookahead-Assertion. Dein alter Pattern endet nämlich beim Quote-Zeichen, d.h. (?<!javascript:) vergleicht, ob der String 'href="' (+ noch die paar Zeichen, die davor kommen) NICHT gleich 'javascript' ist, was immer wahr ist.

Du willst eine Lookahead-Assertion, weil Du ja wissen willst, ob das, was NACH der Position kommt, 'javascript:' ist. Also (?!javacript:) statt (?<!javascript:).

Vielen herzlichen Dank.
Also DIE Logik muss man erstmal verstanden haben.

So funktioniert es nun endlich. *puhhh*

Dein Posting werde ich mir wohl noch ein paarmal durchlesen, um es mir zu merken :-)

Harzliche Grüße vom Berg und Frohe Weihnachtszeit

Tom

--
Nur selber lernen macht schlau