• 締切済み

正規表現について

あるファイルを読み込んで中に変数($xxx)が入っていたら 正規表現にて$xxxの値に変換する事は出来ますでしょうか? 試行錯誤しているのですが、上手くいかず困っています。 変数を正規表現にてマッチングさせるのも上手くいかないです。 ご教授お願いいたします。

みんなの回答

  • asock
  • ベストアンサー率70% (7/10)
回答No.4

> $aaa = テキストボックスaaaの値 > と言う感じで処理したいのです。 結論から言うと、テキストボックス(name=aaa)の値をphp側で変数名$aaa としてアクセスする方法は無いわけではありませんが、PHP4.2.0以降は設定を変更する必要がある他、以下のURLにある通りお勧めしません。 http://www.sound-uz.jp/php/tips/security.html お望みの回答ではありませんが、こういう場合は配列変数を使うのが普通です。PHPの配列は $変数名["文字列"] という風に文字列を添え字として値にアクセスできます。そして幸運なことに、PHPでは$_POSTや$_GET 配列にPOST/GETデータを格納してくれています。 で、デザインファイル中の$xxx記号 を $_POST["xxx"] の値に置換するわけですが、xxxの部分は keys($_POST)で取り出す方法と、ファイル中の$xxx記号から抽出する方法の2通りが考えられます。デザインファイル中の文字列を$strに格納しているとすれば、 前者なら foreach (array_keys($_POST) as $key) $str = str_replace('$'.$key, $_POST[$key], $str); 後者なら $matches=array(); preg_match_all("|\\\$([\w_][\w\d_]*)|s", $str, $matches); //$matches[1]は上記正規表現にマッチした()部分を保持している foreach ($matches[1] as $key) $str=str_replace('$'.$key, $_POST[$key], $str); という感じです。 一方、既に $aaa = $_POST["aaa"] 等して $aaaを用いてご自分で処理を色々書かれているのであれば、${"aaa"} として変数$aaaの値にアクセスできます。これを利用して // $key="aaa"の場合 ${$key}(もしくは$$key)は変数$aaaの値を指す foreach (array_keys($_POST) as $key) $str = str_replace('$'.$key, ${$key}, $str); とすることが出来ますが、この方法はあまり使われないと思います。 色々書きすぎて分かりにくいかもしれませんが、参考にして下さい。

  • ham_kamo
  • ベストアンサー率55% (659/1197)
回答No.3

なるほど、プログラムとデザインの分離ですね。 あらかじめ確認画面のHTMLファイルが用意されていて、そこにユーザが入力した値が表示されるところに、あらかじめ変数名が入っており、そのファイルを読み込んで変数を一括置換し、出力する、ということでしょうか。その確認画面を作成するロジックは複数のフォームから呼び出されるので、変数名も数も不定、ということですね。 PHPファイルの中では、$_POSTか$_GETで値を取得しているはずですが、 それをforeachで取り出してpreg_replace()に渡す配列を作ればできないでしょうか。 foreach ($_POST as $key => $value) { array_push($patterns,$key); array_push($replacements,$value); } としておいて、 preg_replace($patterns, $replacements, $str); とすればうまくいかないですか?

  • ham_kamo
  • ベストアンサー率55% (659/1197)
回答No.2

なるほど、変数がいくつもあるのですね。 それなら preg_replace() で配列を引数に使う方法でできそうですね。 ただ、変数はどれくらいの数だけあるのでしょうか。 例えば、$xxx,$yyy,$zzz という変数がある場合、 $patterns= Array("/\$xxx/","/\$yyy/","/\$zzz/"); $replacements = Array($xxx, $yyy, $zzz); としておいて、 preg_replace($patterns, $replacements, $str); とする方法があります。

参考URL:
http://jp2.php.net/manual/ja/function.preg-replace.php
unchiku777
質問者

補足

再び回答ありがとうございます。 変数の数、名前ともは決まっておりません。 やりたい事としましては、 フォームがあってそこでサブミットされると確認画面に飛ぶ仕組みです。 フォームに例えばテキストボックス名「aaa」「bbb」「ccc」があったとします。 それを受け取りphpで$aaa = テキストボックスaaaの値 と言う感じで処理したいのです。 確認画面はHTMLで記述されており、 テキストaaaを表示するようにしたい場合$aaaと書いてあります。 プログラムとデザインの分離化の為このような仕組みになっております。

  • ham_kamo
  • ベストアンサー率55% (659/1197)
回答No.1

> あるファイルを読み込んで中に変数($xxx)が入っていたら > 正規表現にて$xxxの値に変換する事は出来ますでしょうか? 上記の意図をいまいち理解できてないのですが、ファイルの中に $xxx という文字列があったら、それを $xxx の変数の値に置きかえる、ということですか?それならば、 str_replace("$xxx",$xxx,str); でよくて、正規表現を使う必要性はないような気がするのですが、そういうことではないのでしょうか? 多分もっと複雑なことをしたいのだと思うので、補足をお願いします。

unchiku777
質問者

補足

回答ありがとうございます。 str_replace("$xxx",$xxx,str); だと決まった変数しか対応出来ないのでと思います。 $xxxは例として書いただけです。ややこしくてすみません^^; ham_kamoさんが回答してくれたstr_replace("$xxx",$xxx,str); を$xxxのみだけでなくすべての変数にも対応させたいんですが・・・

関連するQ&A

専門家に質問してみよう