我在html中得到了一些像这样的文字
<p>Test test test $v1 $v2 $v3 $v11</p>
使用PHP我需要替换$ v1 $ v2 $ v3 ... $ v9,我不需要替换$ v10 ... $ v *****
我的问题是,当我的文字中有$ v11时,它最终会替换$ v1 + 1:
$v1 = "here";
...
What I got actually : Test test test $v11 => Test test test here1
I need :Test test test $v11 => Test test test
$ vars是PHP中的一个数组:
$v1 = "here";
$v2 = "";
$v3 = "";
$v4 = "";
$v5 = "";
$v6 = "";
$v7 = "";
$v8 = "";
$v9 = "";
$vars = array($v1,$v2,$v3,$v4,$v5,$v6,$v7,$v8,$v9);
我的功能
function replaceVar($vars, $string)
{
$stringReplace = '$v';
$i = 1;
while ($i <= 9) {
if(!empty($vars[$i]) && strlen($stringReplace . $i) == 3)
{
$string = str_replace('$v' . $i, $vars[$i], $string);
}
else
{
$string = str_replace('$v' . $i, "", $string);
}
$i++;
}
return $string;
}
例外输出: $ vars是PHP中的一个数组:
$v1 = "here";
$v2 = "";
$v3 = "";
$v4 = "";
$v5 = "";
$v6 = "";
$v7 = "";
$v8 = "";
$v9 = "";
$vars = array($v1,$v2,$v3,$v4,$v5,$v6,$v7,$v8,$v9);
echo replaceVar($vars, "Test test test $v1 $v2 $v11");
这里测试测试
答案 0 :(得分:1)
您可以使用preg_replace_callback。请尝试以下
<?php
$str = '<p>Test test test $v1 $v2 $v3 $v11</p>';
$v1 = "here";
$v2 = "";
$v3 = "";
$v4 = "";
$v5 = "";
$v6 = "";
$v7 = "";
$v8 = "";
$v9 = "";
$vars = array($v1,$v2,$v3,$v4,$v5,$v6,$v7,$v8,$v9);
echo preg_replace_callback('/\$v(\d)\s/',
function($match) use ($vars) { return ($vars[$match[1]-1]) . ' '; },
$str);
注意:return ($vars[$match[1]-1])
-1
就在那里,因为$vars
数组中的第0个元素实际上是$v1
注意:我假设&v1
之后有空格,否则您可能需要更改匹配和替换。
说明:
'/\$v(\d)\s/'
匹配$ v和一个数字和一个空格
return ($vars[$match[1]-1]) . ' '
返回$vars
数组中索引匹配值为1的元素。因此,如果(\d)
与1匹配,则会返回$vars[1-1]
答案 1 :(得分:0)
用
替换你的HTML<p>Test test test %s %s %s</p>
然后你只需要
echo vsprintf($string, [$v1, $v2, $v3]);