سؤال

وأنا أكتب محلل للغة البرمجة النصية في 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 مع lookbehind السلبي.

و(أنا العثور على سبيل المثال)

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

وكما في التعليقات، ندرك أن هذا يسبب كلا من أحرف السطر و! للتذكير. لا نستطيع أن نرى حلا أسهل لهذا من str_replace في هذه اللحظة - ولكن تخيل هناك واحد ...

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top