preg_replace 替换值有子表达式值加数值问题
程序员文章站
2022-04-11 23:15:31
...
如下面简单的替换:
$ih=100;
$aa='a123b';
$aa=preg_replace('/^(a)123(b)$/i','$1'.$ih.'$2',$aa);
print_r($aa);
怎么结果就是不对,$ih变为字母就正常,数字的话会丢第一位和$1。在$1随便加个字母也正常,不会是我电脑问题吧?
相当于
$ih=100;
$aa='a123b';
$aa=preg_replace('/^(a)123(b)$/i','$1'.$ih.'$2',$aa);
print_r($aa);
怎么结果就是不对,$ih变为字母就正常,数字的话会丢第一位和$1。在$1随便加个字母也正常,不会是我电脑问题吧?
回复讨论(解决方案)
$aa=preg_replace('/^(a)123(b)$/ie','"$1".$ih."$2"',$aa);
preg_replace('/^(a)*(b)$/i','$1'.$ih.'$2',$aa);
$ih=500;$aa='a123b';$aa=preg_replace('/^(a)123(b)$/i','${1}'.$ih.'${2}',$aa);print_r($aa);
'$1'.$ih.'$2'
相当于
'$1'.‘100’.'$2'$1100$2
修改规则 '$1'.$ih.'$2'
实际传递给 preg_replace 的是 ‘$1100$2'
于是 $1 和 $11 就产生了歧义
所以需要人工将其区别开来 ‘${1}100$2'
按你的格式就是 '${1}'.$ih.'$2'
注意:不能使用双引号
都回答的很好,可惜分不多。早知道早点来这问了,郁闷了一整天。