2011-01-18 7 views
-1

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

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

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

<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> 

Спасибо!

+0

ehhh, откуда эта строка с кодом? почему не просто метод myclass-> myfunction() распечатает его. – dqhendricks

+1

Возможный дубликат [Изменить HTML и PHP с помощью preg_replace] (http://stackoverflow.com/questions/4724564/modify-html-and-php-with-preg-replace) – ircmaxell

+2

Пожалуйста, не пересылайте вопросы, если вы не получайте никаких ответов, которые вам нравятся. Вместо этого отредактируйте вопрос, чтобы добавить дополнительную информацию или уточнить, что вы ищете ... Голосование, чтобы закрыть ... – ircmaxell

ответ

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; 

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

0
$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>'; 
+0

просто угадай здесь. ваш вопрос не имеет большого смысла. – dqhendricks

+0

Я думаю, что вы на правильном пути. –