Pergunta

Eu estou escrevendo um analisador para uma linguagem de script de programação em PHP. A sintaxe do que parece linguagem de script como este:

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

Esta é uma página escrita nessa língua, que exibe Olá, mundo! no navegador. Mas eu também poderia ter um código como este:

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

Por agora eu uso explode("\n", $content) para explodir o conteúdo da página para uma matriz que tem cada linha de código em um índice separado. Então

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

torna-se:

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

Quando termina uma linha com um! (Exceto quando o! Escapou, como \!), Ele deve adicionar essa linha, incluindo a seguinte linha para a matriz como um único elemento. Então

&This is a comment !
on multiple !
lines.

se torna

&This is a comment on multiple lines.

Alguém sabe como fazer isso?

Foi útil?

Solução

você deve ser capaz de usar preg_split com um lookbehind negativo.

(i estou achando um exemplo)

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

De acordo com os comentários, ciente de que isso faz com que ambos os caracteres de nova linha ea! permanecer. não pode ver uma solução mais fácil para isso do que str_replace no momento - mas imagine há um ...

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top