PHPで


$str="hoge:#test#";
$test='abc';
$str=preg_replace("/#(.+)#/","$$1",$str);
echo $str;
----------
hoge:abc


てな感じでreplacementの変数を有効にする方法は
ないでしょうか?

回答の条件
  • URL必須
  • 1人2回まで
  • 13歳以上
  • 登録:2010/03/01 16:07:03
  • 終了:2010/03/03 12:20:19

ベストアンサー

id:Watson No.5

Watson回答回数5ベストアンサー獲得回数32010/03/03 08:53:40

ポイント100pt

http://php.net/manual/ja/function.preg-replace.php

e修飾子を使えば良いのかと思います。

$str="hoge:#test#";
$test='abc';
$str=preg_replace("/#(.+)#/e", "$$1", $str);

echo $str;

実行結果

$ php test.php 
hoge:abc
id:hrhakbn

さすがです!

その答えを求めていました!

2010/03/03 12:18:17

その他の回答(4件)

id:taknt No.1

きゃづみぃ回答回数13539ベストアンサー獲得回数11982010/03/01 16:14:21

通常ならば

$str=preg_replace("/#(.+)#/","$$1",$str); ではなくて

$str=preg_replace("/#(.+)#/",$test,$str); にすべきかと思いますが・・・。

http://php.net/manual/ja/function.preg-replace.php

id:hrhakbn

説明が足りなかったかもしれませんが、それでは意味が無いのですよ。

パターンマッチに合わせてreplacementを動的に変化させたいという

意味だったのです。

2010/03/01 21:34:44
id:km1967 No.2

km1967回答回数541ベストアンサー獲得回数402010/03/01 16:24:30

>|php|

$str="hoge:#test#";

$test='abc';

$str=preg_replace("/#(.+)#/",$test,$str);

echo $str;

||<

http://php.net/manual/ja/function.preg-replace.php

id:supermomonga No.3

supermomonga回答回数17ベストアンサー獲得回数22010/03/01 18:36:28

PHPには可変変数というものがあります。

これを利用すればそういった事も簡潔なコードで実現できますよ。

http://php.net/manual/ja/language.variables.variable.php

id:hrhakbn

$str=preg_replace("/#(.+)#/",${$1},$str);

ということでしょうか?

エラーが出てしまいます。

2010/03/01 21:35:59
id:supermomonga No.4

supermomonga回答回数17ベストアンサー獲得回数22010/03/01 22:11:29

ポイント20pt

コメント欄が無かったので再度投稿します。

$str = "hoge:#test#";

$test = 'abc';

if(preg_match('`#(.+)#`',$str,$matches) && isset($$matches[1])){

$newstr = preg_replace('`#(.+)#`',$$matches[1],$str);

echo $newstr;

}else

echo 'ヒットしませんでした'

?>

こういうことだと思うのですが、違いますか?

まずpreg_matchでパターンのマッチを調べ、testという文字列を抜き出します。

testという文字列はマッチ結果の$matches[1]に入っているので、

次にpreg_replaceを用いテキスト置換を行います。

置換する内容の指定に可変変数を用いることで、この様なことが可能になります。

http://php.net/manual/ja/function.preg-replace.php

id:hrhakbn

なるほど

そういう考え方もあるのですね。

2010/03/03 12:19:08
id:Watson No.5

Watson回答回数5ベストアンサー獲得回数32010/03/03 08:53:40ここでベストアンサー

ポイント100pt

http://php.net/manual/ja/function.preg-replace.php

e修飾子を使えば良いのかと思います。

$str="hoge:#test#";
$test='abc';
$str=preg_replace("/#(.+)#/e", "$$1", $str);

echo $str;

実行結果

$ php test.php 
hoge:abc
id:hrhakbn

さすがです!

その答えを求めていました!

2010/03/03 12:18:17

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

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

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

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

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