PHP正则表达式-在指针出现后附加一个字符串,其中包含部分变量内容,但始终包含整数变量内容


PHP regular expression - append a string after occurrences of a needle with partial variable content, but allways a integer variable content

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将之前匹配的全部重置。