2012-01-06 12 views
0

PHPの文字列のテキストをインクルードのように置き換える方法を知りたい。ここ文字列のテキストをPHPのインクルードファイルに置き換える方法

は私の例の文字列です: "{:プロジェクト、ID = 1} {モジュール}かくかくしかじかかくかくしかじかBLAのBLA"

私は{{モジュール見つけたい:プロジェクト、IDを私は、文字列を持っています= 1}}それを( 'projects.php?id = 1')を含むようにします。それは文字列のどこにあるのでしょうか。

どうすればいいですか?

代替私はこれを行うことができますが、私はそれは次のようになり、文字列からPHPを実行するために取得するカント場合は、「かくかくしかじかかくかくしかじか」

答えて

3

$string = '{{ module:projects,id=1 }}'; 
$string = preg_replace('/{{ module:([^,]+),id=([0-9]+) }}/', 'include(\'$1.php?id=$2\')', $string); 
// $string == include('projects.php?id=1') 

注:あなたは、実際の端にクエリ文字列を持つファイルを含めることはできません。 PHPは 'projects.php?id = 1'という名前のファイルを探します。

preg_match_all('/{{ module:([^,]+),id=([0-9]+) }}/', $string, $matches); 
foreach ($matches[1] as $key => $filename) { 
    // set $id before including the file. you could optionally set $_GET['id']. 
    $id = $matches[2][$key]; 
    include($filename . '.php'); 
} 

複数のパラメータをサポートするには、次のファイルを取得し、実際にそれを含めること

。 Matmarbon'sに似ていますが、よりコンパクトで、パラメータ値が\ wに従うと仮定せず、値をエスケープしませんが、スペーシング(/ s *)の変動の余地も少なくなります。

preg_match_all('/{{ module:([^,]+)((,[^=]+=[^,}]+)*) }}/', $string, $matches); 
foreach ($matches[1] as $key => $filename) { 
    foreach (explode(',', trim($matches[2][$key], ', ')) as $vars) { 
     list($k, $v) = explode('=', $vars); 
     $_GET[$k] = $v; 
    } 
    // then this: 
    include($filename . '.php'); 
    // or, to replace content: 
    ob_start(); 
    include($filename . '.php'); 
    $contents = ob_get_contents(); 
    ob_end_clean(); 
    $string = str_replace($matches[0][$key], $contents, $string); 
} 
0

は、私はあなたがpreg_matchを使用しますが頭痛を避けるためにすることを実現することができると思いますルールを作成するには、explode()を使用して文字列のさまざまな部分を切り取ってください。

カットこの順に文字列:

  1. explode($string, "{{")アレイ($array[1]

  2. explode($result, "}}")で第2の要素をフェッチし、フェッチ1要素

  3. explode($result, ":")をフェッチ第2要素

  4. explode($result, ",")との両方の要素

をフェッチそして、あなたは

$page = $result[0] . '.php'; 
$info = $result[1]; 

を使用することができます次に、あなたの文字列のtheresの繰り返しパターン場合は、見ているinclude($page.$info);

0

を使用しています。 文字列を切り取り、別の形にする方法はいくつかあります。

正規表現を作成してから、これを使用してください。 preg_match

0
  • include('projects.php?id=1');projects.php?id=1ないprojects.phpという名前のファイルが含まれていることをご承知のはありますか?

    $_GET['id'] = 1; 
    include('projects.php'); 
    
  • あなたはpreg_replaceを見てみるshoud: はちょうどそうprojects.phpを含めると$_GET['id']1にを設定します。例(あなたはパラメータについてのやっていることを知っていると仮定):

    echo preg_replace('/\\{\\{\\s*module:(\w+)(,(\w+=\w+))?\\s*\\}\\}/', 
         'include(\'\\1?\\3\');', 
         'bla bla bla bla {{ module:projects,id=1 }} bla bla bla bla'); 
    

    そうでなければ、あなたのパラメータと、残りについての私の仮定は、ここに私の解決策正しい場合:

    function replace_modules($var){ 
        $stringparams = array_filter(explode(',', substr($var[2], 1))); 
        $getparams = array(); 
        foreach($stringparams as $stringparam){ 
         list($key, $value) = explode('=', $stringparam); 
         $getparams[] = sprintf('$_GET[\'%s\']=\'%s\';', 
          addslashes($key), 
          addslashes($value)); 
        } 
        return sprintf('<?php %sinclude(\'%s\') ?>', 
         implode($getparams), addslashes($var[1])); 
    } 
    
    $a= preg_replace_callback('/\\{\\{\\s*module:(\w+)((,\w+=\w+)*)\\s*\\}\\}/', 
        'replace_modules', 
        'bla bla bla bla {{ module:projects,id=1,test=hello }} bla bla bla bla'); 
    

    EDIT: オーケー今、私はあなたが望むものを知っていると思う。ここにある:

    にpreg_replaceと
    function replace_modules($var){ 
        $stringparams = array_filter(explode(',', substr($var[2], 1))); 
        foreach($stringparams as $stringparam){ 
         list($key, $value) = explode('=', $stringparam); 
         $_GET[$key] = $value; 
        } 
        ob_start(); 
        include($var[1].'.php'); 
        return ob_end_clean(); 
    } 
    
    $a= preg_replace_callback('/{{\\s*module:([^,]+)((,[^,=]+=[^,]*)*)\\s*}}/', 
        'replace_modules', 
        'bla bla bla bla {{ module:projects,id=1,test=hello }} bla bla bla bla'); 
    
+0

こんにちは私はparamsとTGIFでやっていることを知っていると思うのですが、私はこれをもっと難しくしていると思います。私は私の文字列をbla bla bla {{projects、1}} bla bla bla私はaa projects.phpを持っています。私は1のIDを印刷したいので、私はbla bla bla {{projects、1}} bla bla blaを作成し、実際にはbla bla bla bla bla blaを印刷します。なぜなら、何とか私は文字列の真中に1を印刷したproejcts.phpを含んでいたからです。 – user875293

+0

@ user875293私は今それを得たと思います! (編集を参照) – Matmarbon

関連する問題