Frage

Ich schreibe einen Parser für eine Scripting-Programmiersprache in PHP. Die Syntax dieser Skriptsprache wie folgt aussieht:

ZOMFG
&This is a comment
(show "Hello, World\!");

Dies ist eine Seite in dieser Sprache geschrieben, die anzeigt Hallo, Welt! im Browser. Aber ich konnte auch den Code wie folgt aussehen:

ZOMFG
&This is a comment !
on multiple !
lines.
(show !
"Hello, !
World\!!
");

Für jetzt verwende ich explode("\n", $content) Inhalt der Seite zu einem Array zu explodieren, das jede Codezeile in einem separaten Index hat. So

ZOMFG
&This is a comment
(show "Hello, World\!");

wird:

array('ZOMFG', '&This is a comment', '(show "Hello, World\!");');

Wenn eine Zeile endet mit einem! (Außer wenn das! Wird entkommen als \!), Es sollte diese Zeile hinzufügen, einschließlich der folgenden Zeile auf das Array als ein einziges Element. So

&This is a comment !
on multiple !
lines.

wird

&This is a comment on multiple lines.

Wer weiß, wie dies zu tun?

War es hilfreich?

Lösung

Sie sollten mit einem negativen Lookbehind verwenden preg_split können.

(ich finde ein Beispiel)

$lines = preg_split('|(?<!\!)\n|', $code);

Wie pro Kommentar, beachten Sie, dass dies bewirkt, dass sowohl die Zeilenumbrüche und das! bleiben. Kann nicht eine einfachere Lösung dieses Problems als str_replace im Moment sehen - aber vorstellen, dass es eine ist ...

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top