Robert: Regex: ersetze ;) falls davor nicht abc|de|ghij steht

Beitrag lesen

Hallöle,

Also hab ich probiert, eine "negative lookahead assertion einzusetzen:
die ist hier aber fehl am platze - du brauchst eine lookbehind assertion:

Aha - die kannte ich noch nicht - Wildedit unterstützt die nicht.

finde: (?<!abc);)
ersetze durch: ###
ergebnis: abc;) ### def###

Ok, im PHP klappt das - muß ich halt damit statt mit Wildedit arbeiten.

In der Hilfe des Tools (WildEdit) heißt es:
"(?!abc)" matches zero characters only if they are not followed by the expression "abc".
was heißt denn "not _followed_" - ist es das, was du bezwecken wolltest?

Nö, nicht wirklich.
aber die neg. lookahead assertion war das einzige, was ich in der Wildedit-Hilfe gefunden hab, was zwar prüft, ob die Zeichen vorhanden sind, diese aber nicht in den match aufnimmt.

Ich danke Dir für diese "Rücksichtnahme" ;-)

Also mit konstantem String abc klappt es jetzt.

Leider beschwert sich PHP, wenn ich statt des konstanten Strings alternativ unterschiedlich lange Strings benutze:

(?<!(abc|de|ghij));)

da kommt dann eine Warnung:
Compilation failed: lookbehind assertion is not fixed length at offset 16 in  <filename> on line <linenumber>
(der Offset scheint sich auf die schließende Klammer der Alternative zu beziehen)

(?<!&(amp|gt|lt|quot));)

ist das, was ich eigentlich bräuchte (was aber nicht funktioniert wegen der unterschiedlichen Längen).

cu,
Robert