人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

PHPで

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


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


●質問者: はるぼぼ27
●カテゴリ:インターネット ウェブ制作
✍キーワード:ABC echo hoge PHP STR
○ 状態 :終了
└ 回答数 : 5/5件

▽最新の回答へ

1 ● きゃづみぃ
●0ポイント

通常ならば

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

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

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

◎質問者からの返答

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

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

意味だったのです。


2 ● km1967
●0ポイント

>|php|

$str="hoge:#test#";

$test='abc';

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

echo $str;

||<

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


3 ● supermomonga
●0ポイント

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

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

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

◎質問者からの返答

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

ということでしょうか?

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


4 ● supermomonga
●20ポイント

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

$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

◎質問者からの返答

なるほど

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


5 ● Watson
●100ポイント ベストアンサー

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
◎質問者からの返答

さすがです!

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

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ