Negatives Lookbehind

Folgendes markiert alle Funktionsaufrufe fett (z.B.: “System.out.println” = out, println, etc.).

$reg = '/(\.)(\w+)/'; 
$rep = '$1<b>$2</b>';
$code = preg_replace($reg, $rep, $code);

Das klappt soweit. Nun möchte ich den regulären Ausdruck in der Form einschränken, dass dies nicht geschehen soll, wenn am Anfang der Zeile “import .*” steht. Sollte eigentlich mit einem Negatives Lookbehind gehen, aber ich weiß nicht wie man dieses verwendet bzw. habe ein Beispiel gefunden, dass aber auf diesen Anwendungsfall nicht übertragbar ist. Weiß jmd. wie ich das realisieren kann?

Lesen bildet :stuck_out_tongue: php.net/manual/en/regexp.ref … rtions.php

Danke für den informativen und sehr hilfreichen Link. Doch ich bin leider bildungsresistent:

Mit:

$reg = '/(?<!import)(.*)(\.)(\w+)/'; 
$rep = '$1$2<b>$3</b>';
$code = preg_replace($reg, $rep, $code);

sollten alle Zeilen, die vorneweg ein “import” haben ignoriert werden. Trotzdem werden Muster der Form import + “…” + (Punkt + Wort) gefunden mit in das Ergebnis aufgenommen.

Kannst du den die reg dahingehenden ändern, dass es nicht mehr so ist. Du scheinst dich damit besser auszukennen als ich (beschäftige mich erst seit kurzem damit).

Zeilenanfang, Import negiert, Punkt Stern, Zeilenende
no n33d 4 look-behinds

Am besten solltest du einen exten Lexer machen, der Zeilenweise arbeitet. per regex auf dem ganzen Code wirst du die Syntax nicht fehlerfrei abdecken können.

PS: Falls du etwas fertiges willst, nimm GeSHi.

$reg = '/^(?<!import)(.*)(\.)(\w+)$/'; 
$rep = '$1$2<b>$3</b>';
$code = preg_replace($reg, $rep, $code);

So etwa? Nein, das funktioniert nicht. Raten bringt doch nichts :neutral_face: .

[quote=„Morpheus“]
no n33d 4 look-behinds[/quote]

was? o.0

[quote=“progandy”]Am besten solltest du einen exten Lexer machen, der Zeilenweise arbeitet. per regex auf dem ganzen Code wirst du die Syntax nicht fehlerfrei abdecken können.

PS: Falls du etwas fertiges willst, nimm GeSHi.[/quote]

Ist ne gute Idee. Wenn ich nicht weiter weiß werde ich das Zeilenweise implementieren.

Nee. Es funktioniert ja schon halbwegs… Der Aufwand lohnt nicht, sich jetzt etwas fertiges anzuschauen.