Разделить и заменить вещи с помощью PHP и preg_replace вместо взрыва?

У меня есть код PHP + HTML в виде строки, содержащей функции. Я хочу, чтобы некоторые вызовы функций были заменены включенным контентом. Объединить несколько файлов в один.

Краткий пример – до

<html>
    <?php myclass->my_function('one', 'two', 'three'); ?>
    <h1>Content in between</h1>
    <?php myclass->my_function('1', '2'); ?>
</html>

Краткий пример — Замена контента

<html>
    <?php run('one', 'two', 'three'); /* Run does include a file */ ?>
    <h1>Content in between</h1>
    <?php run('1', '2'); /* Run does include a file */ ?>
</html>`

Короткий пример – после

<html>
    <?php
    /* Start my_function */
        echo 'This is the result of my_function one two three';
    /* End my_function
    ?>
    <h1>Content in between</h1>
    <?php
    /* Start my_function */
        <?php myclass->my_function('four', 'five', 'six'); ?>
    /* End my_function
    ?>
</html>

Обратите внимание, что myclass находится во включенном содержимом. Результат должен быть снова проанализирован.

Короткий пример — После этого

Все это снова анализируется и заменяет myclass включенным контентом.

<html>
    <?php
    /* Start my_function */
        echo 'This is the result of my_function one two three';
    /* End my_function */
    ?>
    <h1>Content in between</h1>
    <?php
    /* Start my_function */
        echo 'four five six';
    /* End my_function */
    ?>
</html>

Я пытался сделать это с помощью взрыва, но получилось сложно. Два шага «Замена содержимого» и «После», возможно, потребуется выполнить за один шаг.

Посмотрите на это как на строку. Может ли preg_replace решить эту проблему? Как?


person Jens Törnell    schedule 18.01.2011    source источник
comment
Хотите перефразировать? Это несколько сбивает с толку...   -  person Alix Axel    schedule 18.01.2011
comment
Также непонятно, почему myclass->my_function() сначала становится run(), а echo '..' во второй части.   -  person mario    schedule 18.01.2011
comment
Я объяснил Run в комментарии. Он включает содержимое из файла. На самом деле мне нужно сделать следующее: ‹code›echo preg_replace($pattern, $replacement, $string);‹/code›, где pattern находит строку my_function, а замена — это включенное содержимое (включаемое посредством выполнения такой функции, как my_include( «парам1», «парам2»).   -  person Jens Törnell    schedule 18.01.2011


Ответы (1)


$str = '<html>
<?php myclass->my_function(\'styles\', \'home.css\'); ?>
<p>Some other content</p>
<?php myclass->my_function(1, 2, 3); ?>
</html>';

function jens($matches)
{ 
    $path = '';
    $parts = explode(',', $matches[1]);
    foreach($parts as $match)
        $path .= '/' . str_replace('\'', '', trim($match));

    return $path;
}

$replaced = preg_replace_callback('/<\?php myclass->my_function\((.*?)\); \?>/', 'jens', $str);

echo $replaced;

Должен делать то, что ты хочешь.

person alexn    schedule 20.01.2011