PHP exploser la chaîne que si la ligne ne se termine pas par '!'
Question
J'écris un analyseur syntaxique pour un langage de programmation de script en PHP. La syntaxe de ce langage de script ressemble à ceci:
ZOMFG
&This is a comment
(show "Hello, World\!");
Ceci est une page écrite dans cette langue, qui affiche Hello, World! dans le navigateur. Mais je pourrais aussi avoir un code comme celui-ci:
ZOMFG
&This is a comment !
on multiple !
lines.
(show !
"Hello, !
World\!!
");
Pour le moment, j'utilise explode (" \ n ", $ content)
pour décomposer le contenu de la page en un tableau contenant chaque ligne de code dans un index séparé.
Donc
array('ZOMFG', '&This is a comment', '(show "Hello, World\!");');
devient:
&This is a comment !
on multiple !
lines.
Quand une ligne se termine par un! (sauf lorsque! est échappé en tant que \!), il convient d'ajouter cette ligne, y compris la ligne suivante au tableau sous la forme d'un seul élément. Donc
&This is a comment on multiple lines.
devient
<*>Quelqu'un sait-il comment faire cela?
La solution
vous devriez pouvoir utiliser preg_split avec une apparence négative.
(je trouve un exemple)
$lines = preg_split('|(?<!\!)\n|', $code);
Comme indiqué dans les commentaires, sachez que cela provoque à la fois les caractères de nouvelle ligne et le caractère! rester. Vous ne pouvez pas trouver de solution plus simple que str_replace pour le moment, mais imaginez-en un! ...