Christian Seiler: Regular Expressions, negative lookbehind assertion

Beitrag lesen

Hi,

$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:).

Viele Grüße,
Christian