我有几个这样的变量:
$foo = '123';
$bar = 'bqwe';
我需要用变量替换字符串中的{$foo}
和{$bar}
。
preg_replace('~\{\$(.*)?\}~sU', ${'\\1'}, $string);
这不起作用。
PS:正则表达式可能不正确。我还没有使用{$asd}
{$bbb}
等几个变量对其进行测试。我现在正在测试一个变量。
答案 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);