PHP explota la cadena solo si la línea no termina con '!'
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?
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 ...!