مطابقة محتويات داخل علامات PHP باستخدام التعابير المنطقية
سؤال
ولدي بعض المتاعب مطابقة محتويات داخل علامات بي.
وحاليا لدي هذا الرمز، ولكنه لا يعمل بالنسبة لي:
<?php preg_match_all('/<\?php(.+)\?>/', $str, $inside_php); ?>
وأحتاج لاسترداد محتويات حتى أستطيع أن تفعل أشياء أخرى معها، مثل وحدة التقييم ().
المحلول
ووقف هناك حق، كنت لا تريد أن تفعل ذلك بهذه الطريقة!
ويمكنك استخدام tokenizer تمديد PHP لل كسر سلسلة إلى الرموز، والتي سوف تجد موثوق كافة التعليمات البرمجية المصدر PHP. ثم يمكنك أن تفعل ما تحول تريد مع الرموز. التعابير العادية ليست أداة لهذه المهمة (كنت لا تريد لاخماد النار مع ملعقة، أليس كذلك؟)
$tokens = token_get_all($string);
foreach ($tokens as $token) {
if (is_array($token)) {
if (!in_array($token[0], array(T_INLINE_HTML, T_OPEN_TAG, T_CLOSE_TAG))) {
echo $token[1];
}
} else {
echo $token;
}
}
نصائح أخرى
وفترة (أو نقطة) لا يتطابق مع خطوط جديدة:
([.\n\r]+)
وفعل ذلك ^^
<?php preg_match_all('/<\?php([.\n\r]+)\?>/', $str, $inside_php); ?>
لا تنتمي إلى StackOverflow