Pregunta

Estoy escribiendo un analizador para un lenguaje de programación de script en PHP. La sintaxis de ese lenguaje de script se ve así:

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

Esta es una página escrita en ese idioma, que muestra Hello, World! en el navegador Pero también podría tener un código como este:

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

Por ahora uso explotar (" \ n " ;, $ contenido) para explotar el contenido de la página en una matriz que tiene cada línea de código en un índice separado. Entonces

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

se convierte en:

&This is a comment !
on multiple !
lines.

Cuando una línea termina con a! (excepto cuando el! se escapa como \!), debe agregar esa línea, incluida la siguiente línea a la matriz como un solo elemento. Entonces

&This is a comment on multiple lines.

se convierte

<*>

¿Alguien sabe cómo hacer esto?

¿Fue útil?

Solución

deberías poder usar preg_split con una mirada negativa hacia atrás.

(estoy buscando un ejemplo)

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

Según los comentarios, tenga en cuenta que esto causa tanto los caracteres de nueva línea como los! para permanecer No puedo ver una solución más fácil para esto que str_replace en este momento, ¡pero imagina que hay una ...!

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top