2012-04-21 75 views
1

我試圖從一個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代碼。

+3

HTML不是常規語言,因此您需要使用比正則表達式更強大的HTML解析器。 – Paulpro 2012-04-21 22:24:33

+0

我會尋找「」 – Mads 2012-04-21 22:25:32

+0

如果包含一些示例代碼,提供一個很好的答案會更容易。給我們一個模板文件的例子,告訴我們你用什麼語言來解析它。 – Honoki 2012-04-21 22:27:18

回答

0
preg_match("/<\?.*?\?>/m",$output,$matches) 

preg_match("/<\?.*?\?>/s",$output,$matches) 

應該匹配的所有行。

+0

如果在字符串或註釋中有'?>',則不起作用,例如:''; $ c =''; $ d =''; $ e =''; $ a = 1; ?> – Vladimir 2017-09-24 06:25:41

0

您應該將變量傳遞給模板文件,而不是「將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

希望它可以幫助

+0

謝謝。我不想用ob_start();'是一個壞習慣? – waterschaats 2012-04-21 22:46:17

+0

如果你看看大多數MVC框架或模板類的工作,他們使用這種相同的方法。甚至在其主要'_ci_load()'方法中的codeigniter – 2012-04-21 23:01:00

+0

好的,謝謝,這是一個有趣的方法,我會深入研究它。 – waterschaats 2012-04-21 23:03:51

相關問題