preg_replace使用替换的文本作为变量名称

时间:2012-02-04 15:41:32

标签: php regex preg-replace

我有几个这样的变量:

$foo = '123';  
$bar = 'bqwe';

我需要用变量替换字符串中的{$foo}{$bar}

preg_replace('~\{\$(.*)?\}~sU', ${'\\1'}, $string);

这不起作用。

PS:正则表达式可能不正确。我还没有使用{$asd} {$bbb}等几个变量对其进行测试。我现在正在测试一个变量。

3 个答案:

答案 0 :(得分:1)

你应该使正则表达式更具体。使其与\ w +单词字符匹配。

然后你走在正确的轨道上,但是需要/e eval修饰符来使本地范围内的变量查找起作用:

= preg_replace('~\{\$(\w+?)\}~sUe', '${"$1"}', $string);

因此,当它匹配foo时,关系字符串变为${"foo"},然后将其用作表达式。 (在原始代码中,在执行正则表达式之前,它被错误地尝试了。)

答案 1 :(得分:0)

你需要一个循环:

php > $s='blah blah {$foo} blah blah {$bar} blah blah {$foo} blah {$bar} blah';
php > $foo='FOO';
php > $bar='BAR';
php > while (preg_match('~\{\$(.*)?\}~sU', $s, $m)) $s=str_replace($m[0],$$m[1],$s);
php > echo $s;
blah blah FOO blah blah BAR blah blah FOO blah BAR blah

答案 2 :(得分:0)

嗯,我想你想要删除某些变量中存在的文本 然后你可以像

那样做
$foo = '123';  
$bar = 'bqwe';                      
$str= preg_replace("/".$foo ."/", '', $str, 1);
$str= preg_replace("/".$bar ."/", '', $str, 1);