PHP разрывает строку только в том случае, если строка не заканчивается на '!'

StackOverflow https://stackoverflow.com/questions/1223740

  •  11-07-2019
  •  | 
  •  

Вопрос

Я пишу синтаксический анализатор для скриптового языка программирования на 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 , но представьте , что оно есть ...!

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top