我試圖從一個HTML模板文件中獲取php代碼來執行它並將結果放回。 我可以使用哪些正則表達式代碼?有沒有一種方法可以返回找到的第一個標籤的位置?用正則表達式獲取php標籤之間的代碼
<p>some html</p>
<?php $some = "php code"; ?>
<p>some <em>more</em> html</p>
<?php $some = "more php code"; ?>
我想從PHP過濾的PHP代碼。
我試圖從一個HTML模板文件中獲取php代碼來執行它並將結果放回。 我可以使用哪些正則表達式代碼?有沒有一種方法可以返回找到的第一個標籤的位置?用正則表達式獲取php標籤之間的代碼
<p>some html</p>
<?php $some = "php code"; ?>
<p>some <em>more</em> html</p>
<?php $some = "more php code"; ?>
我想從PHP過濾的PHP代碼。
preg_match("/<\?.*?\?>/m",$output,$matches)
或
preg_match("/<\?.*?\?>/s",$output,$matches)
應該匹配的所有行。
如果在字符串或註釋中有'?>',則不起作用,例如:' $b = '?>'; $ c =''; $ d =''; $ e =''; $ a = 1; ?> – Vladimir 2017-09-24 06:25:41
您應該將變量傳遞給模板文件,而不是「將PHP取出並放回原處」。
事情是這樣的:
<?php
function loadTemplate($path,$data=array()){
if (file_exists($path) === false){
throw new Exception('Template not found:'.$path);
return false;
}
extract($data);
ob_start();
require($path);
$return = ob_get_contents();
ob_end_clean();
return $return;
}
$vars = array('var1'=>$value,
'var2'=>$somevalue,
'var3'=>$someothervalue,
'var4'=>$blab);
$template = loadTemplate('path/to/thefile.php',$vars);
?>
然後從內thefile.php訪問$vars
數組值一樣 echo $var1
echo $var2
ECT
希望它可以幫助
謝謝。我不想用ob_start();'是一個壞習慣? – waterschaats 2012-04-21 22:46:17
如果你看看大多數MVC框架或模板類的工作,他們使用這種相同的方法。甚至在其主要'_ci_load()'方法中的codeigniter – 2012-04-21 23:01:00
好的,謝謝,這是一個有趣的方法,我會深入研究它。 – waterschaats 2012-04-21 23:03:51
HTML不是常規語言,因此您需要使用比正則表達式更強大的HTML解析器。 – Paulpro 2012-04-21 22:24:33
我會尋找「" and "?>」 – Mads 2012-04-21 22:25:32
如果包含一些示例代碼,提供一個很好的答案會更容易。給我們一個模板文件的例子,告訴我們你用什麼語言來解析它。 – Honoki 2012-04-21 22:27:18