PHP explode corda só se a linha não termina com '!'
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?
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 ...