2012-04-21 6 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"; ?> 

htmlからフィルタリングされたPHPコードが必要です。

+3

HTMLは通常の言語ではありません。したがって、正規表現だけでなくパワフルなHTMLパーサを使用する必要があります。 – Paulpro

+0

私は ""を探します – Mads

+0

いくつかのサンプルコードを含めると良い答えを提供する方が簡単です。テンプレートファイルの例を与えて、それを解析しようとしている言語を教えてください。 – Honoki

答えて

0
preg_match("/<\?.*?\?>/m",$output,$matches) 
を役に立てば幸い $vars配列の値にアクセスします

または

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

すべての行と一致する必要があります。

+0

文字列やコメントに '?>'が含まれていると動作しません。例: ' '; $ c = ''; $ d = ''; $ e = ''; $ a = 1; ?> ' – Vladimir

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内から電気ショック療法 echo $var2 echo $var1 よう

はそれが

+0

ありがとうございます。私は 'ob_start();を使用していると思っていましたが、悪い癖でしたか? – waterschaats

+0

ほとんどのMVCフレームワークやテンプレートクラスは、この同じメソッドを使用しています。主な '_ci_load()'メソッド内のcodeigniterも –

+0

ありがとう、これは面白いアプローチです。 – waterschaats