Preg_replace и preg_match для получения и замены содержимого HTML/PHP

Мне нужно извлечь некоторый контент HTML/PHP и поместить его в массив.

Вот что у меня есть

Например, приведенный ниже код находится в строке с именем $string.

<html>
<?php myclass->my_function('First', 'Last'); ?>
<p>Some other content</p>
<?php myclass->my_function(1, 2, 3); ?>
</html>

Я хочу найти все значения из функций и суммировать их в массив с помощью preg_match. Должны быть найдены только значения функции myclass->my_function.

Массив должен выглядеть следующим образом

$array = array(
   1 => array('First', 'Last'),
   2 => array(1,2,3),
);

Затем я хочу, чтобы preg_replace заменил все строки на [explode_id], и результат должен быть таким:

<html>
[explode_1]
<p>Some other content</p>
[explode_2]
</html>

Спасибо!


person Jens Törnell    schedule 18.01.2011    source источник
comment
эххх, а откуда эта строка с кодом? почему бы просто не распечатать его с помощью метода myclass-›myfunction().   -  person dqhendricks    schedule 18.01.2011
comment
возможный дубликат изменить HTML и PHP с помощью preg_replace   -  person ircmaxell    schedule 18.01.2011
comment
Пожалуйста, не публикуйте повторно вопросы, если вы не получили ответов, которые вам нравятся. Вместо этого отредактируйте вопрос, чтобы добавить дополнительную информацию или уточнить, что вы ищете... Голосование за закрытие...   -  person ircmaxell    schedule 18.01.2011
comment
Вы пытаетесь построить массив?   -  person Rickstar    schedule 18.01.2011
comment
Также связано: Разделить и заменить вещи на PHP и preg_replace вместо взрыва?   -  person Pops    schedule 18.01.2011


Ответы (2)


$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

person    schedule
comment
тут только предположить. ваш вопрос не имеет большого смысла. - person dqhendricks; 18.01.2011