Supose我有一个类似的字符串
"$c[1]['arts_stock']['art_stock']+$aaa+$c[1234]['abcs_stock']['abc_stock']-$ccc"
是的,它是一根绳子!我只需要在每次出现"$c[nnn]"后加上"[$I]"。
在这种情况下,需要的结果是
"$c[1][$i]['arts_stock']['art_stock']+$aaa+$c[1234][$i]['abcs_stock']['abc_stock']-$ccc
如果可以的话,请帮忙。
看起来很容易,但您必须记住同时转义$
和[]
,因为它们在正则表达式中有含义:
$str = "'$c[1]['arts_stock']['art_stock']+'$aaa+'$c[1234]['abcs_stock']['abc_stock']-'$ccc";
$str = preg_replace('/'$c'['d+']/', ''0[$i]', $str);
var_dump($str);
此打印:
string(86) "$c[1][$i]['arts_stock']['art_stock']+$aaa+$c[1234][$i]['abcs_stock']['abc_stock']-$ccc"
在preg_replace
调用中,'0
是对整个匹配文本的反向引用,因此我们要用匹配文本加上[$i]
来替换匹配文本。
由于Carlos的答案运行良好,您可以尝试此变体:
$str = preg_replace('~'$c'['d+]'K~', '[$i]', $str);
'K
将之前匹配的全部重置。