我正在为PHP编写脚本编程语言的解析器。该脚本语言的语法如下所示:
ZOMFG
&This is a comment
(show "Hello, World\!");
这是一个用该语言编写的页面,显示Hello,World!在浏览器中。但我也可以使用这样的代码:
ZOMFG
&This is a comment !
on multiple !
lines.
(show !
"Hello, !
World\!!
");
现在我使用explode("\n", $content)
将页面的内容分解为一个数组,该数组在单独的索引中包含每行代码。
所以
ZOMFG
&This is a comment
(show "Hello, World\!");
变为:
array('ZOMFG', '&This is a comment', '(show "Hello, World\!");');
当一行结束时! (当!被转义为\!时),它应该将该行添加到数组中,作为一个单独的元素。所以
&This is a comment !
on multiple !
lines.
变为
&This is a comment on multiple lines.
有谁知道怎么做?
答案 0 :(得分:2)
你应该能够使用preg_split和负面的后视。
(我找到了一个例子)
$lines = preg_split('|(?<!\!)\n|', $code);
根据评论,意识到这会导致换行符和!保留。目前看不到比str_replace更容易的解决方案 - 但想象有一个......!