preg_replace并在变量名中使用值

时间:2016-04-03 22:25:12

标签: php regex preg-replace

我有以下代码:

<?php

$clasa = 'HHH';
$length = '100';
$width = 200;
$depth = 300; 


$string1 = '{{clasa}}{{length}}{{width}}';
$string2 = '{{clasa}}{{length}}{{depth}}';
$string3 = '{{clasa}}_word{{length}},anything{{depth}}';

$new1 = preg_replace('/{{([a-zA-Z\_\-]*?)}}/', ${'"$1"'}, $string1);

echo $new1;   

?>

我的新字符串应为HHH100200

我添加了$ depth变量,以便您可以看到我的字符串不会始终使用相同的变量。 我非常接近这样做,但无法创建变量名称;

另外 - 我不熟悉正则表达式 - 我只想在括号内允许a-zA-Z0-9。

2 个答案:

答案 0 :(得分:1)

在这里使用正则表达式不是一种方法,使用带有strtrstr_replace的数组:

$trans = ['{{clasa}}'  => 'HHH',
          '{{length}}' => '100',
          '{{width}}'  => '200',
          '{{depth}}'  => '300'];

$str1 = strtr($str1, $trans); 

答案 1 :(得分:0)

谢谢你,@ Rizier123

<?php

$clasa = 'HHH';
$length = '100';
$width = 200;
$depth = 300; 


$string1 = '{{clasa}}{{length}}{{width}}';
$string2 = '{{clasa}}{{lenght}}{{depth}}';
$string3 = '{{clasa}}_word{{lenght}},anything{{depth}}';

//$new1 = preg_replace('/{{([a-zA-Z\_\-]*?)}}/', ${'"$1"'}, $string1);
$new1 = preg_replace_callback("/{{([a-zA-Z\_\-]*?)}}/", function($m){
    global ${$m["1"]};
    return ${$m["1"]};
}, $string1);

echo $new1;