2009-06-06 6 views
4

私のPHPスクリプト用の正規表現を作成する助けが必要です。基本的には、私のデータを含む連想配列があり、プレース・リプレースを使ってプレースホルダを実際のデータに置き換えたいのです。配列は私が必要以上に多くのアイテムを保持することができるので、私は、str_replaceを使用したくないPHP regex templating - {{var}}のすべての出現を見つけよう

<td>{{address}}</td><td>{{fixDate}}</td><td>{{measureDate}}</td><td>{{builder}}</td> 

:入力は、このようなものになるだろう。

私が正しく理解している場合、preg_replaceは正規表現から見つかったテキストを取り、配列のそのキーの値で置き換えることができます。

<td>{{address}}</td> 

$置き換えるの値に置き換え取得[ 'アドレス']。これは本当ですか、または私はPHPのドキュメントを誤解しましたか?

もし真なら誰かが私のためにこれを解析する正規表現を表示するのを手伝ってもらえますか(まだ正規表現にはあまり良くないので、それがどのように動作するか説明していただければ幸いです)。

多くのありがとうございます。

答えて

8

preg_replace_callback()を使用してください。この種のものには非常に便利です。

$replace_values = array(
    'test' => 'test two', 
); 
$result = preg_replace_callback('!\{\{(\w+)\}\}!', 'replace_value', $input); 

function replace_value($matches) { 
    global $replace_values; 
    return $replace_values[$matches[1]]; 
} 

基本的にこれは(グローバルの$ replace_valuesある)ワードの文字を含む{{...}}のすべての出現を検索し、ルックアップテーブルから値とその値を置き換えると言います。

+0

ありがとうございました。 –

+0

私も、ローカライゼーションのために、多くの感謝を使用しています –

+0

正規表現パターンを作る実際の用語の周りに0個以上のスペースを許しています ''\ {\ {\ s?(\ w +)\} \}! '' したがって、{{term}}だけでなく{{term}}、{{term}}、 '{{term}} ' – Michael

0

整形式のHTML/XML解析の場合は、XPathと組み合わせてDocument Object Model (DOM)を使用することを検討してください。そのようなことのために正規表現よりもはるかに楽しいです。

+0

も許可します。実際にはHTMLタグや属性のテキスト検索を行っていますが、このテンプレート構文は非常に特殊です(二重中括弧)。通常のHTML正規表現の問題はありません。 HTMLの正規表現解析は不安定ですが、これはこのような状況ではありません。 – cletus

0

置き換えられた変数のリストと、一致するファイルと行番号のリストを与えることができるこの変種がありますか?

+0

replace_value()では、変数名を配列に追加していますが、ファイル/行番号はおそらくregexの情報を必要とします。 –

関連する問題