中身に{$q1}={$q2}の記載のある設定ファイルのsetting.txtを作りました。


コレをPHPで読み込む際に、{$q1}等の{}に囲まれたものをPHP内で$array['q1']等の配列内の値に置換したいと思っております。

正規表現を色々試してもうまくいきません。
良い方法はありませんでしょうか?

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:2007/07/09 20:24:59
  • 終了:2007/07/16 20:25:03

回答(2件)

id:kn1967 No.1

kn1967回答回数2915ベストアンサー獲得回数3012007/07/09 21:12:09

ポイント35pt
$a = array('q1' => 'a', 'q2' => 'b');

$b = '{$q1}={$q2}';

$c = preg_replace('/{\$([^}]+)}/e',"\$a['$1']",$b);

パターンのほうは式を展開しないように'シングルクォーテーション'で囲み、

置換後文字列のほうでは式を展開するように"ダブルクォーテーション"で囲む。

PHP: preg_replace - Manual

id:Mook No.2

Mook回答回数1312ベストアンサー獲得回数3912007/07/09 21:36:01

ポイント35pt

PHP で処理するサンプルを作成してみましたが、参考になるでしょうか。

<?
// データ定義
$arr= array( 'q1'=>'Apple', 'q2'=>'Banana' );

// 入力文字列
$dat = '{$q1} != {$q2}';

// 正規表現で検索した結果を $match に格納
preg_match_all( '/\{\$.+?\}/', $dat, $match );

for ( $i=0 ; $i<count($match[0]) ; $i++ ) {
// 配列のデータで置換
    $dd = preg_replace( '/\{\$/', "", $match[0][$i] );
    $dd = preg_replace( '/^\}$/', "", $dd );
    $dat = str_replace( $match[0][$i], $arr[$dd], $dat  );
}

// 結果の表示
print $dat;
?>

PHP preg_match

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません