PHP:替换字符串中最后一个括号中的文本

时间:2016-09-16 13:28:33

标签: php regex

我在想如何更换表格的最后一项,如下所示:

content[1]
content[1][officeImage]
content[2][officeImage]
content[3][something][officeImage]
...

"阵列"的深度可以是无限的,我需要替换他的最后一个:

content[replaced]
content[1][replaced]
content[2][replaced]
content[3][something][replaced]
...

这里有人可以写preg_replace()等吗? 感谢

编辑:

我有这个:

preg_replace('~\[.*!?\]~', '[replaced]', $parent);

但它从" content[1][officeImage]"返回这个" content[replaced]" :

3 个答案:

答案 0 :(得分:3)

Try this:

preg_replace('~^.*\[\K[^]]+~m', 'replaced', $parent);

仅当m包含需要一次替换的多行时,才需要$parent(多行)修饰符。

这里的大诀窍是从^.*\[\K开始。这表示将从行首开始的所有内容与\[匹配。由于这是一个“贪婪”的重复,它将一直持续到最后一个实例(.与没有s修饰符的换行符不匹配)。 \K抛弃了所有匹配的内容,因此我们只更换括号内的内容。

答案 1 :(得分:0)

您可以使用此代码:

$re = "/\\[([^]]*)\\][^]]*$/m"; 
$str = "content[1]\ncontent[1][officeImage]\ncontent[2][officeImage]\ncontent[3][something][officeImage]"; 
$subst = "[replacement]"; 

$result = preg_replace($re, $subst, $str);

查看live PHPlive Regex

答案 2 :(得分:0)

试试这个:

$string = 'content[3][something][officeImage]';
$replaced = 'somestring';
$result = preg_replace('/(.*\[)(.*?)]$/m','$1'.$replaced.']',$string);