PHP взрывает строку, только если строка не заканчивается на «!» - PullRequest
1 голос
/ 03 августа 2009

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

2 голосов
/ 03 августа 2009

вы должны иметь возможность использовать preg_split с отрицательным взглядом назад.

(я нахожу пример)

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

Что касается комментариев, знайте, что это вызывает как символы новой строки, так и! оставаться. На данный момент не могу найти более простого решения, чем str_replace - но представьте, что есть одно!

...