PHP разрывает строку только в том случае, если строка не заканчивается на '!'
Вопрос
Я пишу синтаксический анализатор для скриптового языка программирования на PHP.Синтаксис этого скриптового языка выглядит следующим образом:
ZOMFG
&This is a comment
(show "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.
Кто-нибудь знает, как это сделать?
Решение
вы должны иметь возможность использовать preg_split с отрицательным взглядом назад.
(я нахожу пример)
$lines = preg_split('|(?<!\!)\n|', $code);
Согласно комментариям, учитывая, что это приводит как к символам новой строки, так и к !остаться.На данный момент не вижу более простого решения этой проблемы , чем str_replace , но представьте , что оно есть ...!