只有当行不以'!'结尾时,PHP才会爆炸字符串

时间:2009-08-03 18:02:51

标签: php parsing explode

我正在为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.

有谁知道怎么做?

1 个答案:

答案 0 :(得分:2)

你应该能够使用preg_split和负面的后视。

(我找到了一个例子)

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

根据评论,意识到这会导致换行符和!保留。目前看不到比str_replace更容易的解决方案 - 但想象有一个......!