Preg_replace и preg_match для получения и замены содержимого HTML / PHP - PullRequest
0 голосов
/ 18 января 2011

Мне нужно извлечь некоторый контент 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>

Спасибо!

Ответы [ 2 ]

1 голос
/ 20 января 2011
$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;

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

0 голосов
/ 18 января 2011
$match_array = preg_match('/<\?php myclass->my_function\((.+?)\); \?>/', $input_string, $matches);
$output_arrays = array();
$output_arrays[] = eval('array('.$matches[0][1].')';
$output_arrays[] = eval('array('.$matches[1][1].')';

echo '<html>';
echo implode(' ', $output_arrays[0]);
echo '<p>Some other content</p>';
echo implode(' ', $output_arrays[1]);
echo '</html>';
...