我有一个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可以解决这个问题吗?怎么样?
答案 0 :(得分: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;
应该做你想做的事。