1

假设我有一个这样的字符串

"$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

如果可以,请帮忙。

4

2 回答 2

3

看起来很简单,但您必须记住同时转义$and [],因为它们在正则表达式中具有含义:

$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是对整个匹配文本的反向引用,所以我们告诉用匹配的文本替换匹配的文本 plus [$i]

于 2013-07-23T15:59:33.197 回答
0

由于卡洛斯的回答效果很好,你可以试试这个变体:

$str = preg_replace('~\$c\[\d+]\K~', '[$i]', $str);

\K重置之前匹配的所有内容。

于 2013-07-23T19:02:23.680 回答