Domanda

Sto scrivendo un parser per un linguaggio di programmazione di scripting in PHP. La sintassi di quel linguaggio di scripting è simile al seguente:

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

Questa è una pagina scritta in quella lingua, che mostra Hello, World! nel browser. Ma potrei anche avere un codice come questo:

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

Per ora uso explode (" \ n " ;, $ content) per far esplodere il contenuto della pagina in un array che ha ciascuna riga di codice in un indice separato. Quindi

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

diventa:

&This is a comment !
on multiple !
lines.

Quando una riga termina con un! (eccetto quando! è sfuggito come \!), dovrebbe aggiungere quella linea, inclusa la seguente riga all'array come un singolo elemento. Quindi

&This is a comment on multiple lines.

diventa <*>

Qualcuno sa come farlo?

È stato utile?

Soluzione

dovresti essere in grado di usare preg_split con un aspetto negativo.

(sto cercando un esempio)

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

Come da commenti, consapevole che ciò causa sia i caratteri di nuova riga che i! rimanere. Al momento non riesco a vedere una soluzione più semplice di str_replace - ma immagina che ce ne sia una ...!

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top