مطابقة محتويات داخل علامات PHP باستخدام التعابير المنطقية

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

  •  05-07-2019
  •  | 
  •  

سؤال

ولدي بعض المتاعب مطابقة محتويات داخل علامات بي.

وحاليا لدي هذا الرمز، ولكنه لا يعمل بالنسبة لي:

<?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); ?>
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top